﻿using System.Collections.Generic;
using System.Globalization;
using UnityEngine;

namespace JLGames.RocketDriver.Actions.i18n
{
    public static class I18NUtils
    {
        private static readonly Dictionary<SystemLanguage, string> m_LangeCodeMap = new Dictionary<SystemLanguage, string>()
        {
            {SystemLanguage.Afrikaans, I18NLanguages.af},
            {SystemLanguage.Arabic, I18NLanguages.ar_AE},
            {SystemLanguage.Basque, I18NLanguages.eu},
            {SystemLanguage.Belarusian, I18NLanguages.be},
            {SystemLanguage.Bulgarian, I18NLanguages.bg},
            {SystemLanguage.Catalan, I18NLanguages.ca},
            {SystemLanguage.Chinese, I18NLanguages.zh_CN},
            {SystemLanguage.Czech, I18NLanguages.cs},
            {SystemLanguage.Danish, I18NLanguages.da},
            {SystemLanguage.Dutch, I18NLanguages.nl},
            {SystemLanguage.English, I18NLanguages.en},
            {SystemLanguage.Estonian, I18NLanguages.et},
            {SystemLanguage.Faroese, I18NLanguages.fo},
            {SystemLanguage.Finnish, I18NLanguages.fi},
            {SystemLanguage.French, I18NLanguages.fr},
            {SystemLanguage.German, I18NLanguages.de},
            {SystemLanguage.Greek, I18NLanguages.el},
            {SystemLanguage.Hebrew, I18NLanguages.he},
            {SystemLanguage.Hungarian, I18NLanguages.hu},
            {SystemLanguage.Icelandic, I18NLanguages.@is},
            {SystemLanguage.Indonesian, I18NLanguages.id},
            {SystemLanguage.Italian, I18NLanguages.it},
            {SystemLanguage.Japanese, I18NLanguages.ja},
            {SystemLanguage.Korean, I18NLanguages.ko},
            {SystemLanguage.Latvian, I18NLanguages.lv},
            {SystemLanguage.Lithuanian, I18NLanguages.lt},
            {SystemLanguage.Norwegian, I18NLanguages.no},
            {SystemLanguage.Polish, I18NLanguages.pl},
            {SystemLanguage.Portuguese, I18NLanguages.pt},
            {SystemLanguage.Romanian, I18NLanguages.ro},
            {SystemLanguage.Russian, I18NLanguages.ru},
            {SystemLanguage.SerboCroatian, I18NLanguages.hr},
            {SystemLanguage.Slovak, I18NLanguages.sk},
            {SystemLanguage.Slovenian, I18NLanguages.sl},
            {SystemLanguage.Spanish, I18NLanguages.es},
            {SystemLanguage.Swedish, I18NLanguages.sv},
            {SystemLanguage.Thai, I18NLanguages.th},
            {SystemLanguage.Turkish, I18NLanguages.tr},
            {SystemLanguage.Ukrainian, I18NLanguages.uk},
            {SystemLanguage.Vietnamese, I18NLanguages.vi},
            {SystemLanguage.ChineseSimplified, I18NLanguages.zh_CHS},
            {SystemLanguage.ChineseTraditional, I18NLanguages.zh_CHT},
            {SystemLanguage.Unknown, I18NLanguages.en},
        };

        /// <summary>
        /// Get the i18n language code through SystemLanguage
        /// 通过过SystemLanguage取国际化语言代码
        /// </summary>
        /// <param name="sysLang"></param>
        /// <returns></returns>
        public static string GetLanguageCode(SystemLanguage sysLang)
        {
            if (m_LangeCodeMap.ContainsKey(sysLang)) return m_LangeCodeMap[sysLang];
            return I18NLanguages.en;
        }

        /// <summary>
        /// Get the i18n language code through the RegionInfo
        /// 通过系统国家地区信息取国际化语言代码
        /// </summary>
        /// <param name="region"></param>
        /// <returns></returns>
        public static string GetLanguageCode(RegionInfo region)
        {
            if (null == region || string.IsNullOrEmpty(region.Name)) return I18NLanguages.en;
            return region.Name;
        }

        /// <summary>
        /// Take the default i18n language code
        /// 取默认国际化语言代码
        /// </summary>
        /// <returns></returns>
        public static string GetDefaultLanguageCode()
        {
            var sysLang = Application.systemLanguage;
            return GetLanguageCode(sysLang);
        }
    }
}