/**
 * 大区语言映射器
 * 根据大区数据获取语言代码
 */

// 完整的大区数据（来自大区.json）
const REGIONS_DATA = {
    "中东及北非": [
        { "code": "AE", "name": "阿拉伯联合酋长国" },
        { "code": "BH", "name": "巴林" },
        { "code": "DJ", "name": "吉布提" },
        { "code": "DZ", "name": "阿尔及利亚" },
        { "code": "EG", "name": "埃及" },
        { "code": "IQ", "name": "伊拉克" },
        { "code": "JO", "name": "约旦" },
        { "code": "KM", "name": "科摩罗" },
        { "code": "KW", "name": "科威特" },
        { "code": "LB", "name": "黎巴嫩" },
        { "code": "LY", "name": "利比亚" },
        { "code": "MA", "name": "摩洛哥" },
        { "code": "MR", "name": "毛里塔尼亚" },
        { "code": "OM", "name": "阿曼" },
        { "code": "PS", "name": "巴勒斯坦" },
        { "code": "QA", "name": "卡塔尔" },
        { "code": "SA", "name": "沙特阿拉伯" },
        { "code": "SD", "name": "苏丹" },
        { "code": "SO", "name": "索马里" },
        { "code": "TN", "name": "突尼斯" },
        { "code": "YE", "name": "也门" }
    ],
    "拉美": [
        { "code": "AR", "name": "阿根廷" },
        { "code": "BO", "name": "玻利维亚" },
        { "code": "CL", "name": "智利" },
        { "code": "CO", "name": "哥伦比亚" },
        { "code": "CR", "name": "哥斯达黎加" },
        { "code": "DO", "name": "多米尼加共和国" },
        { "code": "EC", "name": "厄瓜多尔" },
        { "code": "GN", "name": "几内亚" },
        { "code": "GT", "name": "危地马拉" },
        { "code": "HN", "name": "洪都拉斯" },
        { "code": "MX", "name": "墨西哥" },
        { "code": "NI", "name": "尼加拉瓜" },
        { "code": "PA", "name": "巴拿马" },
        { "code": "PE", "name": "秘鲁" },
        { "code": "PY", "name": "巴拉圭" },
        { "code": "SV", "name": "萨尔瓦多" },
        { "code": "UY", "name": "乌拉圭" },
        { "code": "VE", "name": "委内瑞拉" }
    ],
    "中亚及高加索": [
        { "code": "AM", "name": "亚美尼亚" },
        { "code": "AZ", "name": "阿塞拜疆" },
        { "code": "BY", "name": "白俄罗斯" },
        { "code": "GE", "name": "格鲁吉亚" },
        { "code": "KG", "name": "吉尔吉斯斯坦" },
        { "code": "KZ", "name": "哈萨克斯坦" },
        { "code": "MD", "name": "摩尔多瓦" },
        { "code": "TJ", "name": "塔吉克斯坦" },
        { "code": "TM", "name": "土库曼斯坦" },
        { "code": "UA", "name": "乌克兰" },
        { "code": "UZ", "name": "乌兹别克斯坦" }
    ],
    "澳新及大洋洲": [
        { "code": "AU", "name": "澳大利亚" },
        { "code": "CC", "name": "科科斯（基林）群岛" },
        { "code": "CK", "name": "库克群岛" },
        { "code": "CX", "name": "圣诞岛" },
        { "code": "FJ", "name": "斐济" },
        { "code": "FM", "name": "密克罗尼西亚" },
        { "code": "KI", "name": "基里巴斯" },
        { "code": "MH", "name": "马绍尔群岛" },
        { "code": "NF", "name": "诺福克岛" },
        { "code": "NR", "name": "瑙鲁" },
        { "code": "NU", "name": "纽埃" },
        { "code": "NZ", "name": "新西兰" },
        { "code": "PG", "name": "巴布亚新几内亚" },
        { "code": "PN", "name": "皮特凯恩群岛" },
        { "code": "PW", "name": "帕劳" },
        { "code": "SB", "name": "索罗门群岛" },
        { "code": "TK", "name": "托克劳群岛" },
        { "code": "TO", "name": "汤加" },
        { "code": "TV", "name": "图瓦卢" },
        { "code": "VU", "name": "瓦努阿图" },
        { "code": "WF", "name": "瓦利斯" },
        { "code": "WS", "name": "萨摩亚" }
    ],
    "英国及周边": [
        { "code": "CD", "name": "刚果民主共和国" },
        { "code": "GB", "name": "英国" },
        { "code": "GG", "name": "根西岛" },
        { "code": "GI", "name": "直布罗陀" },
        { "code": "IE", "name": "爱尔兰" },
        { "code": "IM", "name": "马恩岛" },
        { "code": "JE", "name": "泽西岛" },
        { "code": "MT", "name": "马耳他" },
        { "code": "SJ", "name": "斯瓦尔巴和扬马延" }
    ],
    "法国及周边": [
        { "code": "FR", "name": "法国" },
        { "code": "GF", "name": "法属圭亚那" },
        { "code": "MC", "name": "摩纳哥" },
        { "code": "NC", "name": "新喀里多尼亚" },
        { "code": "PF", "name": "法属玻利尼西亚" },
        { "code": "RE", "name": "留尼汪" },
        { "code": "TF", "name": "法属南部领地" }
    ],
    "葡语区": [
        { "code": "AO", "name": "安哥拉" },
        { "code": "CV", "name": "佛得角" },
        { "code": "GQ", "name": "赤道几内亚" },
        { "code": "GW", "name": "几内亚比绍" },
        { "code": "MZ", "name": "莫桑比克" },
        { "code": "PT", "name": "葡萄牙" },
        { "code": "ST", "name": "圣多美和普林西比" }
    ],
    "德国及周边": [
        { "code": "AT", "name": "奥地利" },
        { "code": "CH", "name": "瑞士" },
        { "code": "DE", "name": "德国" },
        { "code": "LI", "name": "列支敦士登" }
    ],
    "意大利及周边": [
        { "code": "IT", "name": "意大利" },
        { "code": "SM", "name": "圣马利诺" }
    ],
    "北欧": [
        { "code": "DK", "name": "丹麦" },
        { "code": "FI", "name": "芬兰" },
        { "code": "FO", "name": "法罗群岛" },
        { "code": "GL", "name": "格陵兰" },
        { "code": "IS", "name": "冰岛" },
        { "code": "NO", "name": "挪威" },
        { "code": "SE", "name": "瑞典" }
    ],
    "美国": [
        { "code": "AS", "name": "美属萨摩亚" },
        { "code": "GU", "name": "关岛" },
        { "code": "MP", "name": "北马里亚纳群岛" },
        { "code": "UM", "name": "美国本土外小岛屿" },
        { "code": "US", "name": "美国" },
        { "code": "PR", "name": "波多黎各" },
        { "code": "VI", "name": "美属维尔京群岛" }
    ],
    "西班牙及周边": [
        { "code": "AD", "name": "安道尔" },
        { "code": "ES", "name": "西班牙" }
    ],
    "中欧（捷匈斯）": [
        { "code": "CZ", "name": "捷克共和国" },
        { "code": "HU", "name": "匈牙利" },
        { "code": "SK", "name": "斯洛伐克" }
    ],
    "波罗的海三国": [
        { "code": "EE", "name": "爱沙尼亚" },
        { "code": "LT", "name": "立陶宛" },
        { "code": "LV", "name": "拉脱维亚" }
    ],
    "巴尔干地区": [
        { "code": "AL", "name": "阿尔巴尼亚" },
        { "code": "BA", "name": "波斯尼亚和黑塞哥维那" },
        { "code": "BG", "name": "保加利亚" },
        { "code": "GR", "name": "希腊" },
        { "code": "HR", "name": "克罗地亚" },
        { "code": "ME", "name": "黑山" },
        { "code": "MK", "name": "北马其顿" },
        { "code": "RS", "name": "塞尔维亚" },
        { "code": "SI", "name": "斯洛文尼亚" }
    ],
    "巴西": [{ "code": "BR", "name": "巴西" }],
    "日本": [{ "code": "JP", "name": "日本" }],
    "韩国": [{ "code": "KR", "name": "韩国" }],
    "中国台湾": [{ "code": "TW", "name": "台湾" }],
    "印度尼西亚": [{ "code": "ID", "name": "印度尼西亚" }],
    "马来西亚": [{ "code": "MY", "name": "马来西亚" }],
    "菲律宾": [{ "code": "PH", "name": "菲律宾" }],
    "泰国": [{ "code": "TH", "name": "泰国" }],
    "越南": [{ "code": "VN", "name": "越南" }],
    "土耳其": [{ "code": "TR", "name": "土耳其" }],
    "罗马尼亚": [{ "code": "RO", "name": "罗马尼亚" }],
    "波兰": [{ "code": "PL", "name": "波兰" }],
    "荷兰": [{ "code": "NL", "name": "荷兰" }]
}

// ISO 国家代码 → 语言代码映射（完整版）
const COUNTRY_CODE_TO_LANGUAGE = {
    // 阿拉伯语区
    AE: 'ar', BH: 'ar', DJ: 'ar', DZ: 'ar', EG: 'ar', IQ: 'ar', JO: 'ar',
    KM: 'ar', KW: 'ar', LB: 'ar', LY: 'ar', MA: 'ar', MR: 'ar', OM: 'ar',
    PS: 'ar', QA: 'ar', SA: 'ar', SD: 'ar', TN: 'ar', YE: 'ar',
    SO: 'so', // 索马里语

    // 西班牙语区（拉美）
    AR: 'es', BO: 'es', CL: 'es', CO: 'es', CR: 'es', DO: 'es', EC: 'es',
    GT: 'es', HN: 'es', MX: 'es', NI: 'es', PA: 'es', PE: 'es', PY: 'es',
    SV: 'es', UY: 'es', VE: 'es', ES: 'es',
    GQ: 'es', // 赤道几内亚

    // 中亚及高加索
    AM: 'hy', AZ: 'az', BY: 'be', GE: 'ka', KG: 'ky', KZ: 'kk',
    MD: 'ro', TJ: 'tg', TM: 'tk', UA: 'uk', UZ: 'uz',

    // 澳新及大洋洲（主要英语区）
    AU: 'en', NZ: 'en', FJ: 'en', PG: 'en',
    CC: 'en', CK: 'en', CX: 'en', FM: 'en', KI: 'en', MH: 'en', NF: 'en',
    NR: 'en', NU: 'en', PN: 'en', PW: 'en', SB: 'en', TK: 'en', TV: 'en',
    WS: 'sm', TO: 'to', VU: 'bi', WF: 'fr',

    // 英国及周边
    GB: 'en', IE: 'en', GG: 'en', GI: 'en', IM: 'en', JE: 'en',
    CD: 'fr', // 刚果民主共和国（法语）
    SJ: 'no', // 斯瓦尔巴和扬马延（挪威语）
    MT: 'mt', // 马耳他语

    // 法语区
    FR: 'fr', MC: 'fr', GF: 'fr', NC: 'fr', PF: 'fr', RE: 'fr', TF: 'fr',
    GN: 'fr', // 几内亚

    // 葡语区
    AO: 'pt', CV: 'pt', GW: 'pt', MZ: 'pt', PT: 'pt', ST: 'pt', BR: 'pt',

    // 德语区
    AT: 'de', CH: 'de', DE: 'de', LI: 'de',

    // 意大利语
    IT: 'it', SM: 'it',

    // 北欧
    DK: 'da', FI: 'fi', IS: 'is', NO: 'no', SE: 'sv',
    GL: 'kl', // 格陵兰语

    // 美国
    US: 'en', AS: 'en', GU: 'en', MP: 'en', UM: 'en', VI: 'en',
    PR: 'es', // 波多黎各（西班牙语）

    // 西班牙及周边
    AD: 'ca', // 安道尔（加泰罗尼亚语）

    // 中欧
    CZ: 'cs', HU: 'hu', SK: 'sk',

    // 波罗的海
    EE: 'et', LT: 'lt', LV: 'lv',

    // 巴尔干
    AL: 'sq', BA: 'bs', BG: 'bg', GR: 'el', HR: 'hr',
    ME: 'sr', MK: 'mk', RS: 'sr', SI: 'sl',

    // 亚洲
    JP: 'ja', KR: 'ko', TW: 'zh-TW', ID: 'id', MY: 'ms',
    PH: 'tl', TH: 'th', VN: 'vi', TR: 'tr',

    // 其他
    RO: 'ro', PL: 'pl', NL: 'nl',
}

// 语言代码 → 语言名称（用于显示）
const LANGUAGE_NAMES = {
    'ar': '阿拉伯语',
    'es': '西班牙语',
    'en': '英语',
    'fr': '法语',
    'pt': '葡萄牙语',
    'de': '德语',
    'it': '意大利语',
    'ja': '日语',
    'ko': '韩语',
    'zh-TW': '繁体中文',
    'id': '印尼语',
    'ms': '马来语',
    'tl': '菲律宾语',
    'th': '泰语',
    'vi': '越南语',
    'tr': '土耳其语',
    'ro': '罗马尼亚语',
    'pl': '波兰语',
    'nl': '荷兰语',
    'hy': '亚美尼亚语',
    'az': '阿塞拜疆语',
    'be': '白俄罗斯语',
    'ka': '格鲁吉亚语',
    'ky': '吉尔吉斯语',
    'kk': '哈萨克语',
    'tg': '塔吉克语',
    'tk': '土库曼语',
    'uk': '乌克兰语',
    'uz': '乌兹别克语',
    'da': '丹麦语',
    'fi': '芬兰语',
    'is': '冰岛语',
    'no': '挪威语',
    'sv': '瑞典语',
    'cs': '捷克语',
    'hu': '匈牙利语',
    'sk': '斯洛伐克语',
    'et': '爱沙尼亚语',
    'lt': '立陶宛语',
    'lv': '拉脱维亚语',
    'sq': '阿尔巴尼亚语',
    'bs': '波斯尼亚语',
    'bg': '保加利亚语',
    'el': '希腊语',
    'hr': '克罗地亚语',
    'sr': '塞尔维亚语',
    'mk': '马其顿语',
    'sl': '斯洛文尼亚语',
    'mt': '马耳他语',
    'ca': '加泰罗尼亚语',
    'sm': '萨摩亚语',
    'to': '汤加语',
    'bi': '比斯拉马语',
    'so': '索马里语',
    'kl': '格陵兰语',
}

/**
 * 获取所有大区名称列表
 */
export function getRegions() {
    return Object.keys(REGIONS_DATA)
}

/**
 * 获取某个大区的所有国家
 */
export function getCountriesForRegion(region) {
    return REGIONS_DATA[region] || []
}

/**
 * 获取某个大区的所有语言代码（去重）
 */
export function getLanguagesForRegion(region) {
    const countries = REGIONS_DATA[region] || []
    const languages = new Set()

    for (const country of countries) {
        const lang = COUNTRY_CODE_TO_LANGUAGE[country.code]
        if (lang) {
            languages.add(lang)
        }
    }

    return Array.from(languages)
}

/**
 * 获取多个大区的所有语言代码（去重）
 */
export function getLanguagesForRegions(regions) {
    const languages = new Set()

    for (const region of regions) {
        const regionLangs = getLanguagesForRegion(region)
        for (const lang of regionLangs) {
            languages.add(lang)
        }
    }

    return Array.from(languages)
}

/**
 * 获取语言名称
 */
export function getLanguageName(langCode) {
    return LANGUAGE_NAMES[langCode] || langCode
}

/**
 * 获取大区内的语言信息（用于展示）
 */
export function getLanguageInfoForRegion(region) {
    const languages = getLanguagesForRegion(region)
    return languages.map(code => ({
        code,
        name: LANGUAGE_NAMES[code] || code
    }))
}
