using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ISIM
{
    /// <summary>
    /// Algoritmus na skloňování jmen napsal p4koo
    /// </summary>
    class SklonovaniCeskychJmen
    {
        private struct Jmeno
        {
            public string Pojmenovani;
            public string OsloveneJmeno;
            public Jmeno(string jmeno, string osloveneJmeno)
            {
                this.Pojmenovani = jmeno;
                this.OsloveneJmeno = osloveneJmeno;
            }
            public Jmeno(string jmeno)
            {
                this.OsloveneJmeno = jmeno;
                this.Pojmenovani = jmeno;
            }
        }

        private Jmeno[] vyjimky = new Jmeno[]
		{
			new Jmeno("Zeus", "Zeusi"),
			new Jmeno("Petr", "Petře"),
			new Jmeno("Drama"),
			new Jmeno("Téma"),
			new Jmeno("Schéma"),
			new Jmeno("Dilema"),
			new Jmeno("Astma"),
			new Jmeno("Aroma"),
			new Jmeno("Dilema"),
			new Jmeno("Klima"),
			new Jmeno("Panorama"),
			new Jmeno("Paradigma"),
			new Jmeno("Trauma"),
			new Jmeno("Plazma"),
			new Jmeno("František", "Františku")
		};

        public string Sklonuj(string slovo)
        {
            if (slovo.IndexOf(' ') != -1)
            {
                string[] slova = slovo.Split(' ');
                string[] vysklonovanaSlova = new string[slova.Length];
                for (int i = 0; i < vysklonovanaSlova.Length; i++)
                {
                    vysklonovanaSlova[i] = Sklonuj(slova[i]);
                }
                return String.Join(" ", vysklonovanaSlova);
            }
            else
            {
                string result;
                if (string.IsNullOrEmpty(slovo) || slovo.Length < 1)
                {
                    result = string.Empty;
                }
                else
                {
                    slovo = slovo.Trim();
                    int num = slovo.Length - 1;
                    slovo = slovo[0].ToString().ToUpper() + slovo.Substring(1, num);
                    Jmeno jmeno = this.vyjimky.FirstOrDefault((Jmeno j) => j.Pojmenovani == slovo);
                    if (jmeno.OsloveneJmeno != null)
                    {
                        result = jmeno.OsloveneJmeno;
                    }
                    else
                    {
                        string text = slovo;
                        if ((slovo.Length > 3) && (slovo.Substring(slovo.Length - 3) == "ová")) return slovo;

                        if ((slovo[num - 1] != 'u' || slovo[num] != 'm') && (slovo[num - 1] != 'o' || slovo[num] != 'n'))
                        {
                            if (slovo[num - 1] == 'i' && slovo[num] == 'a')
                            {
                                text = slovo.Substring(0, num - 1) + "ie";
                            }
                            else
                            {
                                if (slovo[num - 1] == 'í' && slovo[num] == 'a')
                                {
                                    text = slovo.Substring(0, num - 1) + "íe";
                                }
                                else
                                {
                                    if (slovo[num - 1] == 'e' && slovo[num] == 'c')
                                    {
                                        text = slovo.Substring(0, num - 1) + "če";
                                    }
                                    else
                                    {
                                        if (slovo[num - 1] == 'e' && slovo[num] == 'k')
                                        {
                                            text = slovo.Substring(0, num - 1) + "ku";
                                        }
                                        else
                                        {
                                            if (slovo[num - 1] == 'c' && slovo[num] == 'h')
                                            {
                                                text += "u";
                                            }
                                            else
                                            {
                                                if (slovo[num] == 'a' || slovo[num] == 'á')
                                                {
                                                    text = slovo.Substring(0, num) + "o";
                                                }
                                                else
                                                {
                                                    if (slovo[num] == 'ž' || slovo[num] == 'l' || slovo[num] == 'j' || slovo[num] == 's' || slovo[num] == 'č' || slovo[num] == 'c' || slovo[num] == 'x' || slovo[num] == 'š' || slovo[num] == 'z')
                                                    {
                                                        text += "i";
                                                    }
                                                    else
                                                    {
                                                        if (slovo[num] == 'n' || slovo[num] == 't' || slovo[num] == 'b' || slovo[num] == 'd' || slovo[num] == 'ď' || slovo[num] == 'f' || slovo[num] == 't' || slovo[num] == 'n' || slovo[num] == 'ň' || slovo[num] == 'p' || slovo[num] == 'm' || slovo[num] == 'v' || slovo[num] == 'w' || slovo[num] == 'r')
                                                        {
                                                            text += "e";
                                                        }
                                                        else
                                                        {
                                                            if (slovo[num] == 'k' || slovo[num] == 'g')
                                                            {
                                                                text += "u";
                                                            }
                                                            else
                                                            {
                                                                if (slovo[num] == 'é')
                                                                {
                                                                    text = slovo.Substring(0, num) + "e";
                                                                }
                                                                else
                                                                {
                                                                    if (slovo[num] == 'ó' || slovo[num] == 'ň')
                                                                    {
                                                                        text = slovo.Substring(0, num) + "o";
                                                                    }
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        result = text;
                    }
                }
                return result;
            }
        }
    }
}
