using System;

namespace Exercises
{
	interface IConvertible
	{
		string ConvertToCSharp(string stringToConvert);
		string ConvertToVB2005(string stringToConvert);
	}

	interface ICodeChecker : IConvertible
	{
		bool CheckCodeSyntax(string stringToCheck, string whichLang);
	}

	public class ProgramHelper : ICodeChecker
	{
		public ProgramHelper()
		{
			Console.WriteLine("Tworzenie obiektu ProgramHelper");
		}

		public virtual string ConvertToCSharp(string stringToConvert)
		{
			return "Przekształcam podany łańcuch znaków na kod w języku C#";
		}

		public virtual string ConvertToVB2005(string stringToConvert)
		{
			return "Przekształcam podany łańcuch znaków na kod w języku VB 2005";
		}

		public bool CheckCodeSyntax(string stringToCheck, string whichLang)
		{
			switch (whichLang)
			{
				case "CSharp":
					Console.WriteLine(
					   "Sprawdzam składnię języka C# w łańcuchu \"{0}\"", stringToCheck);
					return true;
				case "VB2005":
					Console.WriteLine(
					   "Sprawdzam składnię języka VB 2005 w łańcuchu \"{0}\"",
					   stringToCheck);
					return true;
				default:
					return false;
			}
		}
	} // Koniec ProgramHelper

	class Tester
	{

		static void Main()
		{
			Tester t = new Tester();
			t.Run();
		}

		public void Run()
		{
			// Tworzy obiekt klasy ProgramHelper
			ProgramHelper theProgramHelper = new ProgramHelper();

			// Przekształca wiersz kodu w języku VB na kod w języku C#
			string cSharpString = theProgramHelper.ConvertToCSharp(
			   "Public Sub Read() Implements IStorable.Read " +
			   "Console.WriteLine(\"Implementacja metody Read interfejsu IStorable\")"
			   + "End Sub 'Read");

			Console.WriteLine(cSharpString);
			Console.WriteLine(
			   "Sprawdzam składnię łańcucha \"{0}\"... Wynik {1}", cSharpString,
			   theProgramHelper.CheckCodeSyntax(cSharpString, "CSharp"));

			// Przekształcanie zmodyfikowanego wiersza z powrotem na język VB
			string vbString = theProgramHelper.ConvertToCSharp(cSharpString);

			Console.WriteLine(vbString);
			Console.WriteLine(
			   "Sprawdzam składnię łańcucha \"{0}\"... Wynik {1}", vbString,
			   theProgramHelper.CheckCodeSyntax(vbString, "VB2005"));

		} // Koniec run
	}    // Koniec Tester
}       // Koniec namespace

