from __future__ import annotations

# Generated from ISO 3166 data. Kept local so the app has no runtime package dependency.
ISO3_TO_ISO2: dict[str, str] = {
    'ABW': 'AW',
    'AFG': 'AF',
    'AGO': 'AO',
    'AIA': 'AI',
    'ALA': 'AX',
    'ALB': 'AL',
    'AND': 'AD',
    'ARE': 'AE',
    'ARG': 'AR',
    'ARM': 'AM',
    'ASM': 'AS',
    'ATA': 'AQ',
    'ATF': 'TF',
    'ATG': 'AG',
    'AUS': 'AU',
    'AUT': 'AT',
    'AZE': 'AZ',
    'BDI': 'BI',
    'BEL': 'BE',
    'BEN': 'BJ',
    'BES': 'BQ',
    'BFA': 'BF',
    'BGD': 'BD',
    'BGR': 'BG',
    'BHR': 'BH',
    'BHS': 'BS',
    'BIH': 'BA',
    'BLM': 'BL',
    'BLR': 'BY',
    'BLZ': 'BZ',
    'BMU': 'BM',
    'BOL': 'BO',
    'BRA': 'BR',
    'BRB': 'BB',
    'BRN': 'BN',
    'BTN': 'BT',
    'BVT': 'BV',
    'BWA': 'BW',
    'CAF': 'CF',
    'CAN': 'CA',
    'CCK': 'CC',
    'CHE': 'CH',
    'CHL': 'CL',
    'CHN': 'CN',
    'CIV': 'CI',
    'CMR': 'CM',
    'COD': 'CD',
    'COG': 'CG',
    'COK': 'CK',
    'COL': 'CO',
    'COM': 'KM',
    'CPV': 'CV',
    'CRI': 'CR',
    'CUB': 'CU',
    'CUW': 'CW',
    'CXR': 'CX',
    'CYM': 'KY',
    'CYP': 'CY',
    'CZE': 'CZ',
    'DEU': 'DE',
    'DJI': 'DJ',
    'DMA': 'DM',
    'DNK': 'DK',
    'DOM': 'DO',
    'DZA': 'DZ',
    'ECU': 'EC',
    'EGY': 'EG',
    'ERI': 'ER',
    'ESH': 'EH',
    'ESP': 'ES',
    'EST': 'EE',
    'ETH': 'ET',
    'FIN': 'FI',
    'FJI': 'FJ',
    'FLK': 'FK',
    'FRA': 'FR',
    'FRO': 'FO',
    'FSM': 'FM',
    'GAB': 'GA',
    'GBR': 'GB',
    'GEO': 'GE',
    'GGY': 'GG',
    'GHA': 'GH',
    'GIB': 'GI',
    'GIN': 'GN',
    'GLP': 'GP',
    'GMB': 'GM',
    'GNB': 'GW',
    'GNQ': 'GQ',
    'GRC': 'GR',
    'GRD': 'GD',
    'GRL': 'GL',
    'GTM': 'GT',
    'GUF': 'GF',
    'GUM': 'GU',
    'GUY': 'GY',
    'HKG': 'HK',
    'HMD': 'HM',
    'HND': 'HN',
    'HRV': 'HR',
    'HTI': 'HT',
    'HUN': 'HU',
    'IDN': 'ID',
    'IMN': 'IM',
    'IND': 'IN',
    'IOT': 'IO',
    'IRL': 'IE',
    'IRN': 'IR',
    'IRQ': 'IQ',
    'ISL': 'IS',
    'ISR': 'IL',
    'ITA': 'IT',
    'JAM': 'JM',
    'JEY': 'JE',
    'JOR': 'JO',
    'JPN': 'JP',
    'KAZ': 'KZ',
    'KEN': 'KE',
    'KGZ': 'KG',
    'KHM': 'KH',
    'KIR': 'KI',
    'KNA': 'KN',
    'KOR': 'KR',
    'KWT': 'KW',
    'LAO': 'LA',
    'LBN': 'LB',
    'LBR': 'LR',
    'LBY': 'LY',
    'LCA': 'LC',
    'LIE': 'LI',
    'LKA': 'LK',
    'LSO': 'LS',
    'LTU': 'LT',
    'LUX': 'LU',
    'LVA': 'LV',
    'MAC': 'MO',
    'MAF': 'MF',
    'MAR': 'MA',
    'MCO': 'MC',
    'MDA': 'MD',
    'MDG': 'MG',
    'MDV': 'MV',
    'MEX': 'MX',
    'MHL': 'MH',
    'MKD': 'MK',
    'MLI': 'ML',
    'MLT': 'MT',
    'MMR': 'MM',
    'MNE': 'ME',
    'MNG': 'MN',
    'MNP': 'MP',
    'MOZ': 'MZ',
    'MRT': 'MR',
    'MSR': 'MS',
    'MTQ': 'MQ',
    'MUS': 'MU',
    'MWI': 'MW',
    'MYS': 'MY',
    'MYT': 'YT',
    'NAM': 'NA',
    'NCL': 'NC',
    'NER': 'NE',
    'NFK': 'NF',
    'NGA': 'NG',
    'NIC': 'NI',
    'NIU': 'NU',
    'NLD': 'NL',
    'NOR': 'NO',
    'NPL': 'NP',
    'NRU': 'NR',
    'NZL': 'NZ',
    'OMN': 'OM',
    'PAK': 'PK',
    'PAN': 'PA',
    'PCN': 'PN',
    'PER': 'PE',
    'PHL': 'PH',
    'PLW': 'PW',
    'PNG': 'PG',
    'POL': 'PL',
    'PRI': 'PR',
    'PRK': 'KP',
    'PRT': 'PT',
    'PRY': 'PY',
    'PSE': 'PS',
    'PYF': 'PF',
    'QAT': 'QA',
    'REU': 'RE',
    'ROU': 'RO',
    'RUS': 'RU',
    'RWA': 'RW',
    'SAU': 'SA',
    'SDN': 'SD',
    'SEN': 'SN',
    'SGP': 'SG',
    'SGS': 'GS',
    'SHN': 'SH',
    'SJM': 'SJ',
    'SLB': 'SB',
    'SLE': 'SL',
    'SLV': 'SV',
    'SMR': 'SM',
    'SOM': 'SO',
    'SPM': 'PM',
    'SRB': 'RS',
    'SSD': 'SS',
    'STP': 'ST',
    'SUR': 'SR',
    'SVK': 'SK',
    'SVN': 'SI',
    'SWE': 'SE',
    'SWZ': 'SZ',
    'SXM': 'SX',
    'SYC': 'SC',
    'SYR': 'SY',
    'TCA': 'TC',
    'TCD': 'TD',
    'TGO': 'TG',
    'THA': 'TH',
    'TJK': 'TJ',
    'TKL': 'TK',
    'TKM': 'TM',
    'TLS': 'TL',
    'TON': 'TO',
    'TTO': 'TT',
    'TUN': 'TN',
    'TUR': 'TR',
    'TUV': 'TV',
    'TWN': 'TW',
    'TZA': 'TZ',
    'UGA': 'UG',
    'UKR': 'UA',
    'UMI': 'UM',
    'URY': 'UY',
    'USA': 'US',
    'UZB': 'UZ',
    'VAT': 'VA',
    'VCT': 'VC',
    'VEN': 'VE',
    'VGB': 'VG',
    'VIR': 'VI',
    'VNM': 'VN',
    'VUT': 'VU',
    'WLF': 'WF',
    'WSM': 'WS',
    'YEM': 'YE',
    'ZAF': 'ZA',
    'ZMB': 'ZM',
    'ZWE': 'ZW',
}

def iso2_from_code(value: str) -> str:
    code = "".join(character for character in str(value or "").upper() if character.isalpha())
    if len(code) == 2:
        return code
    if len(code) == 3:
        return ISO3_TO_ISO2.get(code, "")
    return ""


ISO2_TO_ISO3: dict[str, str] = {iso2: iso3 for iso3, iso2 in ISO3_TO_ISO2.items()}


def iso3_from_code(value: str) -> str:
    code = "".join(character for character in str(value or "").upper() if character.isalpha())
    if len(code) == 3 and code in ISO3_TO_ISO2:
        return code
    if len(code) == 2:
        return ISO2_TO_ISO3.get(code, "")
    return ""


# Numeric country identifiers used by the KHL Stat2TV players-countries feed.
# The XML contains one Player per row and does not carry ISO codes, so the
# identifier has to be translated before local SVG flags can be selected.
KHL_COUNTRY_ID_TO_ISO3: dict[str, str] = {
    "1": "RUS",
    "2": "CZE",
    "3": "SVK",
    "4": "LVA",
    "5": "BLR",
    "6": "KAZ",
    "7": "USA",
    "8": "CAN",
    "9": "UKR",
    "10": "EST",
    "11": "LTU",
    "12": "SWE",
    "13": "FIN",
    "14": "AUT",
    "15": "DEU",
    "16": "DNK",
    "17": "NOR",
    "18": "CHE",
    "19": "HUN",
    "20": "SVN",
    "21": "JPN",
    "22": "POL",
    "23": "GBR",
    "24": "MDA",
    "25": "HRV",
    "26": "KOR",
    "27": "BGR",
    "28": "ITA",
    "29": "FRA",
    "30": "BEL",
    "31": "CHN",
    "32": "ISR",
    "33": "UZB",
    "43": "NLD",
}


def khl_country_codes(country_id: str) -> tuple[str, str]:
    iso3 = KHL_COUNTRY_ID_TO_ISO3.get(str(country_id or "").strip(), "")
    return iso2_from_code(iso3), iso3
