_COUNTRIES = [
    {"country": "AE", "phone_code": "971", "region": "EU"},
    {"country": "AF", "phone_code": "93", "region": "EU"},
    {"country": "AL", "phone_code": "355", "region": "EU"},
    {"country": "AM", "phone_code": "374", "region": "EU"},
    {"country": "AO", "phone_code": "244", "region": "EU"},
    {"country": "AR", "phone_code": "54", "region": "AZ"},
    {"country": "AT", "phone_code": "43", "region": "EU"},
    {"country": "AU", "phone_code": "61", "region": "AZ"},
    {"country": "AZ", "phone_code": "994", "region": "EU"},
    {"country": "BA", "phone_code": "387", "region": "EU"},
    {"country": "BD", "phone_code": "880", "region": "EU"},
    {"country": "BE", "phone_code": "32", "region": "EU"},
    {"country": "BF", "phone_code": "226", "region": "EU"},
    {"country": "BG", "phone_code": "359", "region": "EU"},
    {"country": "BH", "phone_code": "973", "region": "EU"},
    {"country": "BI", "phone_code": "257", "region": "EU"},
    {"country": "BJ", "phone_code": "229", "region": "EU"},
    {"country": "BN", "phone_code": "673", "region": "EU"},
    {"country": "BO", "phone_code": "591", "region": "AZ"},
    {"country": "BR", "phone_code": "55", "region": "AZ"},
    {"country": "BT", "phone_code": "975", "region": "EU"},
    {"country": "BW", "phone_code": "267", "region": "EU"},
    {"country": "BY", "phone_code": "375", "region": "EU"},
    {"country": "BZ", "phone_code": "501", "region": "EU"},
    {"country": "CA", "phone_code": "1", "region": "AZ"},
    {"country": "CD", "phone_code": "243", "region": "EU"},
    {"country": "CF", "phone_code": "236", "region": "EU"},
    {"country": "CG", "phone_code": "242", "region": "EU"},
    {"country": "CH", "phone_code": "41", "region": "EU"},
    {"country": "CI", "phone_code": "225", "region": "EU"},
    {"country": "CL", "phone_code": "56", "region": "AZ"},
    {"country": "CM", "phone_code": "237", "region": "EU"},
    {"country": "CN", "phone_code": "86", "region": "AY"},
    {"country": "CO", "phone_code": "57", "region": "AZ"},
    {"country": "CR", "phone_code": "506", "region": "EU"},
    {"country": "CV", "phone_code": "238", "region": "EU"},
    {"country": "CY", "phone_code": "357", "region": "EU"},
    {"country": "CZ", "phone_code": "420", "region": "EU"},
    {"country": "DE", "phone_code": "49", "region": "EU"},
    {"country": "DJ", "phone_code": "253", "region": "EU"},
    {"country": "DK", "phone_code": "45", "region": "EU"},
    {"country": "DO", "phone_code": "1809", "region": "EU"},
    {"country": "DO", "phone_code": "1829", "region": "EU"},
    {"country": "DO", "phone_code": "1849", "region": "EU"},
    {"country": "DZ", "phone_code": "213", "region": "EU"},
    {"country": "EC", "phone_code": "593", "region": "AZ"},
    {"country": "EE", "phone_code": "372", "region": "EU"},
    {"country": "EG", "phone_code": "20", "region": "EU"},
    {"country": "ER", "phone_code": "291", "region": "EU"},
    {"country": "ES", "phone_code": "34", "region": "EU"},
    {"country": "ET", "phone_code": "251", "region": "EU"},
    {"country": "FI", "phone_code": "358", "region": "EU"},
    {"country": "FJ", "phone_code": "679", "region": "EU"},
    {"country": "FR", "phone_code": "33", "region": "EU"},
    {"country": "GA", "phone_code": "241", "region": "EU"},
    {"country": "GB", "phone_code": "44", "region": "EU"},
    {"country": "GE", "phone_code": "995", "region": "EU"},
    {"country": "GH", "phone_code": "233", "region": "EU"},
    {"country": "GL", "phone_code": "299", "region": "EU"},
    {"country": "GM", "phone_code": "220", "region": "EU"},
    {"country": "GN", "phone_code": "224", "region": "EU"},
    {"country": "GQ", "phone_code": "240", "region": "EU"},
    {"country": "GR", "phone_code": "30", "region": "EU"},
    {"country": "GT", "phone_code": "502", "region": "AZ"},
    {"country": "GY", "phone_code": "592", "region": "EU"},
    {"country": "HK", "phone_code": "852", "region": "AZ"},
    {"country": "HN", "phone_code": "504", "region": "EU"},
    {"country": "HR", "phone_code": "385", "region": "EU"},
    {"country": "HT", "phone_code": "509", "region": "EU"},
    {"country": "HU", "phone_code": "36", "region": "EU"},
    {"country": "ID", "phone_code": "62", "region": "AZ"},
    {"country": "IE", "phone_code": "353", "region": "EU"},
    {"country": "IL", "phone_code": "972", "region": "EU"},
    {"country": "IM", "phone_code": "44", "region": "EU"},
    {"country": "IN", "phone_code": "91", "region": "IN"},
    {"country": "IQ", "phone_code": "964", "region": "EU"},
    {"country": "IR", "phone_code": "98", "region": "EU"},
    {"country": "IS", "phone_code": "354", "region": "EU"},
    {"country": "IT", "phone_code": "39", "region": "AZ"},
    {"country": "JM", "phone_code": "1876", "region": "EU"},
    {"country": "JO", "phone_code": "962", "region": "EU"},
    {"country": "JP", "phone_code": "81", "region": "AZ"},
    {"country": "KE", "phone_code": "254", "region": "EU"},
    {"country": "KG", "phone_code": "996", "region": "EU"},
    {"country": "KH", "phone_code": "855", "region": "EU"},
    {"country": "KM", "phone_code": "269", "region": "EU"},
    {"country": "KP", "phone_code": "850", "region": "EU"},
    {"country": "KR", "phone_code": "82", "region": "AZ"},
    {"country": "KW", "phone_code": "965", "region": "EU"},
    {"country": "KY", "phone_code": "1345", "region": "EU"},
    {"country": "KZ", "phone_code": "7", "region": "EU"},
    {"country": "LA", "phone_code": "856", "region": "EU"},
    {"country": "LB", "phone_code": "961", "region": "EU"},
    {"country": "LK", "phone_code": "94", "region": "EU"},
    {"country": "LR", "phone_code": "231", "region": "EU"},
    {"country": "LS", "phone_code": "266", "region": "EU"},
    {"country": "LT", "phone_code": "370", "region": "EU"},
    {"country": "LU", "phone_code": "352", "region": "EU"},
    {"country": "LV", "phone_code": "371", "region": "EU"},
    {"country": "LY", "phone_code": "218", "region": "EU"},
    {"country": "MA", "phone_code": "212", "region": "EU"},
    {"country": "MC", "phone_code": "377", "region": "EU"},
    {"country": "MD", "phone_code": "373", "region": "EU"},
    {"country": "ME", "phone_code": "382", "region": "EU"},
    {"country": "MG", "phone_code": "261", "region": "EU"},
    {"country": "MK", "phone_code": "389", "region": "EU"},
    {"country": "ML", "phone_code": "223", "region": "EU"},
    {"country": "MM", "phone_code": "95", "region": "AZ"},
    {"country": "MN", "phone_code": "976", "region": "EU"},
    {"country": "MO", "phone_code": "853", "region": "AZ"},
    {"country": "MQ", "phone_code": "596", "region": "EU"},
    {"country": "MR", "phone_code": "222", "region": "EU"},
    {"country": "MT", "phone_code": "356", "region": "EU"},
    {"country": "MU", "phone_code": "230", "region": "EU"},
    {"country": "MV", "phone_code": "960", "region": "EU"},
    {"country": "MW", "phone_code": "265", "region": "EU"},
    {"country": "MX", "phone_code": "52", "region": "AZ"},
    {"country": "MY", "phone_code": "60", "region": "AZ"},
    {"country": "MZ", "phone_code": "258", "region": "EU"},
    {"country": "NA", "phone_code": "264", "region": "EU"},
    {"country": "NCL", "phone_code": "687", "region": "EU"},
    {"country": "NE", "phone_code": "227", "region": "EU"},
    {"country": "NG", "phone_code": "234", "region": "EU"},
    {"country": "NI", "phone_code": "505", "region": "AZ"},
    {"country": "NL", "phone_code": "31", "region": "EU"},
    {"country": "NO", "phone_code": "47", "region": "EU"},
    {"country": "NP", "phone_code": "977", "region": "EU"},
    {"country": "NZ", "phone_code": "64", "region": "AZ"},
    {"country": "OM", "phone_code": "968", "region": "EU"},
    {"country": "PA", "phone_code": "507", "region": "EU"},
    {"country": "PE", "phone_code": "51", "region": "AZ"},
    {"country": "PF", "phone_code": "689", "region": "EU"},
    {"country": "PH", "phone_code": "63", "region": "AZ"},
    {"country": "PK", "phone_code": "92", "region": "EU"},
    {"country": "PL", "phone_code": "48", "region": "EU"},
    {"country": "PR", "phone_code": "1787", "region": "AZ"},
    {"country": "PT", "phone_code": "351", "region": "EU"},
    {"country": "PY", "phone_code": "595", "region": "AZ"},
    {"country": "QA", "phone_code": "974", "region": "EU"},
    {"country": "RE", "phone_code": "262", "region": "EU"},
    {"country": "RO", "phone_code": "40", "region": "EU"},
    {"country": "RS", "phone_code": "381", "region": "EU"},
    {"country": "RU", "phone_code": "7", "region": "EU"},
    {"country": "RW", "phone_code": "250", "region": "EU"},
    {"country": "SA", "phone_code": "966", "region": "EU"},
    {"country": "SD", "phone_code": "249", "region": "EU"},
    {"country": "SE", "phone_code": "46", "region": "EU"},
    {"country": "SG", "phone_code": "65", "region": "EU"},
    {"country": "SI", "phone_code": "386", "region": "EU"},
    {"country": "SK", "phone_code": "421", "region": "EU"},
    {"country": "SL", "phone_code": "232", "region": "EU"},
    {"country": "SM", "phone_code": "378", "region": "EU"},
    {"country": "SN", "phone_code": "221", "region": "EU"},
    {"country": "SO", "phone_code": "252", "region": "EU"},
    {"country": "SR", "phone_code": "597", "region": "AZ"},
    {"country": "SV", "phone_code": "503", "region": "EU"},
    {"country": "SY", "phone_code": "963", "region": "EU"},
    {"country": "SZ", "phone_code": "268", "region": "EU"},
    {"country": "TD", "phone_code": "235", "region": "EU"},
    {"country": "TG", "phone_code": "228", "region": "EU"},
    {"country": "TH", "phone_code": "66", "region": "AZ"},
    {"country": "TJ", "phone_code": "992", "region": "EU"},
    {"country": "TM", "phone_code": "993", "region": "EU"},
    {"country": "TN", "phone_code": "216", "region": "EU"},
    {"country": "TO", "phone_code": "676", "region": "EU"},
    {"country": "TR", "phone_code": "90", "region": "EU"},
    {"country": "TT", "phone_code": "1868", "region": "EU"},
    {"country": "TW", "phone_code": "886", "region": "AZ"},
    {"country": "TZ", "phone_code": "255", "region": "EU"},
    {"country": "UA", "phone_code": "380", "region": "EU"},
    {"country": "UG", "phone_code": "256", "region": "EU"},
    {"country": "US", "phone_code": "1", "region": "AZ"},
    {"country": "UY", "phone_code": "598", "region": "AZ"},
    {"country": "UZ", "phone_code": "998", "region": "EU"},
    {"country": "VA", "phone_code": "379", "region": "EU"},
    {"country": "VE", "phone_code": "58", "region": "AZ"},
    {"country": "VG", "phone_code": "1284", "region": "EU"},
    {"country": "VI", "phone_code": "1340", "region": "EU"},
    {"country": "VN", "phone_code": "84", "region": "AZ"},
    {"country": "YE", "phone_code": "967", "region": "EU"},
    {"country": "ZA", "phone_code": "27", "region": "EU"},
    {"country": "ZM", "phone_code": "260", "region": "EU"},
    {"country": "ZR", "phone_code": "243", "region": "EU"},
    {"country": "ZW", "phone_code": "263", "region": "EU"},
]

PHONE_CODES = {v["phone_code"]: v for v in _COUNTRIES}
REGIONS = {v["region"]: v for v in _COUNTRIES}
COUNTRIES = {v["country"]: v for v in _COUNTRIES}


def region_for_country(country: str) -> str:
    return COUNTRIES.get(country, {}).get("region", "EU")


def region_for_phone_code(phone_code: str) -> str:
    return PHONE_CODES.get(phone_code, {}).get("region", "EU")


def phone_code_for_region(region: str) -> str:
    return REGIONS.get(region, {}).get("phone_code", "44")


def phone_code_for_country(country: str) -> str:
    return COUNTRIES.get(country, {}).get("phone_code", "44")
