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

namespace TJAPlayer3
{
    internal interface ILang
    {
        string GetString(int idx);
    }

    static internal class CLangManager
    {
        // Cheap factory-like design pattern

        public static (string, int) DefaultLanguage = ("ja", 0);
        public static void langAttach(string lang)
        {
            switch (lang) {
                case "zh":
                    CLangManager.LangInstance = new CLang_zh();
                    break;
                case "es":
                    CLangManager.LangInstance = new CLang_es();
                    break;
                case "fr":
                    CLangManager.LangInstance = new CLang_fr();
                    break;
                case "en":
                    CLangManager.LangInstance = new CLang_en();
                    break;
                case "ja":
                default:
                    CLangManager.LangInstance = new CLang_jp();
                    break;
            }
        }

        public static int langToInt(string lang)
        {
            switch (lang)
            {
                case "zh":
                    return 4;
                case "es":
                    return 3;
                case "fr":
                    return 2;
                case "en":
                    return 1;
                case "ja":
                default:
                    return DefaultLanguage.Item2;
            }
        }

        public static string fetchLang()
        {
            if (LangInstance is CLang_jp)
                return "ja";
            else if (LangInstance is CLang_en)
                return "en";
            else if (LangInstance is CLang_fr)
                return "fr";
            else if (LangInstance is CLang_es)
                return "es";
            else if (LangInstance is CLang_zh)
                return "zh";
            return DefaultLanguage.Item1;
        }

        public static string intToLang(int idx)
        {
            switch (idx)
            {
                case 4:
                    return "zh";
                case 3:
                    return "es";
                case 2:
                    return "fr";
                case 1:
                    return "en";
                case 0:
                default:
                    return DefaultLanguage.Item1;
            }
        }

        public static readonly string[] Languages = new string[] { "日本語", "English", "Français", "Español", "中文" };
        public static ILang LangInstance { get; private set; }  = new CLang_jp();
    }
}