/**
 * 语言文件加载器
 * 仅加载当前语言文件，减少每页请求数
 *
 * 添加新语言时，只需在此数组添加配置
 */
(function() {
  var i18nLanguages = [
    {
      code: 'en',           // 语言代码，用于 localStorage 和内部标识
      label: 'English',     // 显示名称
      dict: 'LANG_EN',      // window 上的字典变量名
      file: 'en.js',        // 语言文件名
      backend: 'english',   // 后端语言标识
      browserMatch: ['en']  // 浏览器语言匹配前缀
    },
    {
      code: 'zh',
      label: '简体中文',
      dict: 'LANG_ZH',
      file: 'zh.js',
      backend: 'chinese',
      browserMatch: ['zh']  // 匹配 zh 但不匹配 zh-tw/zh-hk 等（繁体优先匹配）
    },
    {
      code: 'zht',
      label: '繁體中文',
      dict: 'LANG_ZHT',
      file: 'zht.js',
      backend: 'chinese_traditional',
      // 繁体中文匹配：台湾、香港、澳门、通用繁体标识
      browserMatch: ['zh-tw', 'zh-hk', 'zh-mo', 'zh-hant']
    },
    {
      code: 'de',
      label: 'Deutsch',
      dict: 'LANG_DE',
      file: 'de.js',
      backend: 'german',
      browserMatch: ['de']
    },
    {
      code: 'es',
      label: 'Español',
      dict: 'LANG_ES',
      file: 'es.js',
      backend: 'spanish',
      browserMatch: ['es']
    },
    {
      code: 'fr',
      label: 'Français',
      dict: 'LANG_FR',
      file: 'fr.js',
      backend: 'french',
      browserMatch: ['fr']
    },
    {
      code: 'it',
      label: 'Italiano',
      dict: 'LANG_IT',
      file: 'it.js',
      backend: 'italian',
      browserMatch: ['it']
    },
    {
      code: 'ja',
      label: '日本語',
      dict: 'LANG_JA',
      file: 'ja.js',
      backend: 'japanese',
      browserMatch: ['ja']
    },
    {
      code: 'ko',
      label: '한국어',
      dict: 'LANG_KO',
      file: 'ko.js',
      backend: 'korean',
      browserMatch: ['ko']
    },
    {
      code: 'pt',
      label: 'Português',
      dict: 'LANG_PT',
      file: 'pt.js',
      backend: 'portuguese',
      browserMatch: ['pt']
    },
    {
      code: 'ru',
      label: 'Русский',
      dict: 'LANG_RU',
      file: 'ru.js',
      backend: 'russian',
      browserMatch: ['ru']
    },
    {
      code: 'tr',
      label: 'Türkçe',
      dict: 'LANG_TR',
      file: 'tr.js',
      backend: 'turkish',
      browserMatch: ['tr']
    }
  ];
  var i18nDefaultLang = 'en';
  var basePath = 'js/lang/';

  function detectBrowserLang() {
    var navLang = '';
    try {
      navLang = (navigator.language || navigator.userLanguage || '').toLowerCase();
    } catch (e) {
      navLang = '';
    }

    if (!navLang) return i18nDefaultLang;

    // 先精确匹配（如 zh-tw），再前缀匹配（如 zh）
    // 繁体中文需要精确匹配，否则 zh-cn 会错误匹配到 zht
    for (var i = 0; i < i18nLanguages.length; i++) {
      var lang = i18nLanguages[i];
      for (var j = 0; j < lang.browserMatch.length; j++) {
        var match = lang.browserMatch[j];
        if (navLang === match || navLang.indexOf(match + '-') === 0) {
          return lang.code;
        }
      }
    }

    // 前缀匹配（如 en-US 匹配 en）
    for (var i = 0; i < i18nLanguages.length; i++) {
      var lang = i18nLanguages[i];
      for (var j = 0; j < lang.browserMatch.length; j++) {
        var match = lang.browserMatch[j];
        if (navLang.indexOf(match) === 0) {
          return lang.code;
        }
      }
    }

    return i18nDefaultLang;
  }

  function getValidLangCodes() {
    var codes = [];
    for (var i = 0; i < i18nLanguages.length; i++) {
      codes.push(i18nLanguages[i].code);
    }
    return codes;
  }

  function getLangConfig(code) {
    for (var i = 0; i < i18nLanguages.length; i++) {
      if (i18nLanguages[i].code === code) {
        return i18nLanguages[i];
      }
    }
    return null;
  }

  var initialLang = (function () {
    var validCodes = getValidLangCodes();

    try {
      var saved = localStorage.getItem('lang');
      if (saved && validCodes.indexOf(saved) !== -1) {
        return saved;
      }
    } catch (e) {
      // 读取 localStorage 失败时忽略，走自动检测
    }

    var auto = detectBrowserLang();
    try {
      localStorage.setItem('lang', auto);
    } catch (e) {
      // 写入 localStorage 失败时忽略
    }
    return auto;
  })();

  // 供 i18n.js 复用，避免语言选择不一致
  window.I18N_LANGUAGES = i18nLanguages;
  window.I18N_DEFAULT_LANG = i18nDefaultLang;
  window.I18N_SELECTED_LANG = initialLang;

  var config = getLangConfig(initialLang) || getLangConfig(i18nDefaultLang);
  if (config && config.file) {
    // 使用 document.write 同步加载（确保在 i18n.js 之前加载完成）
    document.write('<script src="' + basePath + config.file + '"><\/script>');
  }
})();
