use std::collections::HashSet;
use std::sync::LazyLock;

/// Returns whether the given country code is supported by Google Gemini.
///
/// <https://ai.google.dev/gemini-api/docs/available-regions>
pub fn is_supported_country(country_code: &str) -> bool {
    SUPPORTED_COUNTRIES.contains(&country_code)
}

/// The list of country codes supported by Google Gemini.
///
/// https://ai.google.dev/gemini-api/docs/available-regions
static SUPPORTED_COUNTRIES: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
    vec![
        "DZ", // Algeria
        "AS", // American Samoa
        "AO", // Angola
        "AI", // Anguilla
        "AQ", // Antarctica
        "AG", // Antigua and Barbuda
        "AR", // Argentina
        "AM", // Armenia
        "AW", // Aruba
        "AU", // Australia
        "AT", // Austria
        "AZ", // Azerbaijan
        "BS", // The Bahamas
        "BH", // Bahrain
        "BD", // Bangladesh
        "BB", // Barbados
        "BE", // Belgium
        "BZ", // Belize
        "BJ", // Benin
        "BM", // Bermuda
        "BT", // Bhutan
        "BO", // Bolivia
        "BW", // Botswana
        "BR", // Brazil
        "IO", // British Indian Ocean Territory
        "VG", // British Virgin Islands
        "BN", // Brunei
        "BG", // Bulgaria
        "BF", // Burkina Faso
        "BI", // Burundi
        "CV", // Cabo Verde
        "KH", // Cambodia
        "CM", // Cameroon
        "CA", // Canada
        "BQ", // Caribbean Netherlands
        "KY", // Cayman Islands
        "CF", // Central African Republic
        "TD", // Chad
        "CL", // Chile
        "CX", // Christmas Island
        "CC", // Cocos (Keeling) Islands
        "CO", // Colombia
        "KM", // Comoros
        "CK", // Cook Islands
        "CI", // Côte d'Ivoire
        "CR", // Costa Rica
        "HR", // Croatia
        "CW", // Curaçao
        "CZ", // Czech Republic
        "CD", // Democratic Republic of the Congo
        "DK", // Denmark
        "DJ", // Djibouti
        "DM", // Dominica
        "DO", // Dominican Republic
        "EC", // Ecuador
        "EG", // Egypt
        "SV", // El Salvador
        "GQ", // Equatorial Guinea
        "ER", // Eritrea
        "EE", // Estonia
        "SZ", // Eswatini
        "ET", // Ethiopia
        "FK", // Falkland Islands (Islas Malvinas)
        "FJ", // Fiji
        "FI", // Finland
        "FR", // France
        "GA", // Gabon
        "GM", // The Gambia
        "GE", // Georgia
        "DE", // Germany
        "GH", // Ghana
        "GI", // Gibraltar
        "GR", // Greece
        "GD", // Grenada
        "GU", // Guam
        "GT", // Guatemala
        "GG", // Guernsey
        "GN", // Guinea
        "GW", // Guinea-Bissau
        "GY", // Guyana
        "HT", // Haiti
        "HM", // Heard Island and McDonald Islands
        "HN", // Honduras
        "HU", // Hungary
        "IS", // Iceland
        "IN", // India
        "ID", // Indonesia
        "IQ", // Iraq
        "IE", // Ireland
        "IM", // Isle of Man
        "IL", // Israel
        "IT", // Italy
        "JM", // Jamaica
        "JP", // Japan
        "JE", // Jersey
        "JO", // Jordan
        "KZ", // Kazakhstan
        "KE", // Kenya
        "KI", // Kiribati
        "KG", // Kyrgyzstan
        "KW", // Kuwait
        "LA", // Laos
        "LV", // Latvia
        "LB", // Lebanon
        "LS", // Lesotho
        "LR", // Liberia
        "LY", // Libya
        "LI", // Liechtenstein
        "LT", // Lithuania
        "LU", // Luxembourg
        "MG", // Madagascar
        "MW", // Malawi
        "MY", // Malaysia
        "MV", // Maldives
        "ML", // Mali
        "MT", // Malta
        "MH", // Marshall Islands
        "MR", // Mauritania
        "MU", // Mauritius
        "MX", // Mexico
        "FM", // Micronesia
        "MN", // Mongolia
        "MS", // Montserrat
        "MA", // Morocco
        "MZ", // Mozambique
        "NA", // Namibia
        "NR", // Nauru
        "NP", // Nepal
        "NL", // Netherlands
        "NC", // New Caledonia
        "NZ", // New Zealand
        "NI", // Nicaragua
        "NE", // Niger
        "NG", // Nigeria
        "NU", // Niue
        "NF", // Norfolk Island
        "MP", // Northern Mariana Islands
        "NO", // Norway
        "OM", // Oman
        "PK", // Pakistan
        "PW", // Palau
        "PS", // Palestine
        "PA", // Panama
        "PG", // Papua New Guinea
        "PY", // Paraguay
        "PE", // Peru
        "PH", // Philippines
        "PN", // Pitcairn Islands
        "PL", // Poland
        "PT", // Portugal
        "PR", // Puerto Rico
        "QA", // Qatar
        "CY", // Republic of Cyprus
        "CG", // Republic of the Congo
        "RO", // Romania
        "RW", // Rwanda
        "BL", // Saint Barthélemy
        "KN", // Saint Kitts and Nevis
        "LC", // Saint Lucia
        "PM", // Saint Pierre and Miquelon
        "VC", // Saint Vincent and the Grenadines
        "SH", // Saint Helena, Ascension and Tristan da Cunha
        "WS", // Samoa
        "ST", // São Tomé and Príncipe
        "SA", // Saudi Arabia
        "SN", // Senegal
        "SC", // Seychelles
        "SL", // Sierra Leone
        "SG", // Singapore
        "SK", // Slovakia
        "SI", // Slovenia
        "SB", // Solomon Islands
        "SO", // Somalia
        "ZA", // South Africa
        "GS", // South Georgia and the South Sandwich Islands
        "KR", // South Korea
        "SS", // South Sudan
        "ES", // Spain
        "LK", // Sri Lanka
        "SD", // Sudan
        "SR", // Suriname
        "SE", // Sweden
        "CH", // Switzerland
        "TW", // Taiwan
        "TJ", // Tajikistan
        "TZ", // Tanzania
        "TH", // Thailand
        "TL", // Timor-Leste
        "TG", // Togo
        "TK", // Tokelau
        "TO", // Tonga
        "TT", // Trinidad and Tobago
        "TN", // Tunisia
        "TR", // Türkiye
        "TM", // Turkmenistan
        "TC", // Turks and Caicos Islands
        "TV", // Tuvalu
        "UG", // Uganda
        "GB", // United Kingdom
        "AE", // United Arab Emirates
        "US", // United States
        "UM", // United States Minor Outlying Islands
        "VI", // U.S. Virgin Islands
        "UY", // Uruguay
        "UZ", // Uzbekistan
        "VU", // Vanuatu
        "VE", // Venezuela
        "VN", // Vietnam
        "WF", // Wallis and Futuna
        "EH", // Western Sahara
        "YE", // Yemen
        "ZM", // Zambia
        "ZW", // Zimbabwe
    ]
    .into_iter()
    .collect()
});
