"""
Copyright (c) 2016-2020 Keith Sterling http://www.keithsterling.com

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
documentation files (the "Software"), to deal in the Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the
Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
"""


class CountryCodes:

    RAW_DATA = [
        ["Afghanistan", "AF", "AFG", "4"],
        ["Albania", "AL", "ALB", "8"],
        ["Algeria", "DZ", "DZA", "12"],
        ["American Samoa", "AS", "ASM", "16"],
        ["Andorra", "AD", "AND", "20"],
        ["Angola", "AO", "AGO", "24"],
        ["Anguilla", "AI", "AIA", "660"],
        ["Antarctica", "AQ", "ATA", "10"],
        ["Antigua and Barbuda", "AG", "ATG", "28"],
        ["Argentina", "AR", "ARG", "32"],
        ["Armenia", "AM", "ARM", "51"],
        ["Aruba", "AW", "ABW", "533"],
        ["Australia", "AU", "AUS", "36"],
        ["Austria", "AT", "AUT", "40"],
        ["Azerbaijan", "AZ", "AZE", "31"],
        ["Bahamas", "BS", "BHS", "44"],
        ["Bahrain", "BH", "BHR", "48"],
        ["Bangladesh", "BD", "BGD", "50"],
        ["Barbados", "BB", "BRB", "52"],
        ["Belarus", "BY", "BLR", "112"],
        ["Belgium", "BE", "BEL", "56"],
        ["Belize", "BZ", "BLZ", "84"],
        ["Benin", "BJ", "BEN", "204"],
        ["Bermuda", "BM", "BMU", "60"],
        ["Bhutan", "BT", "BTN", "64"],
        ["Bolivia ", "BO", "BOL", "68"],
        ["Bonaire", "BQ", "BES", "535"],
        ["Sint Eustatius", "BQ", "BES", "535"],
        ["Saba", "BQ", "BES", "535"],
        ["Bosnia and Herzegovina", "BA", "BIH", "70"],
        ["Botswana", "BW", "BWA", "72"],
        ["Bouvet Island", "BV", "BVT", "74"],
        ["Brazil", "BR", "BRA", "76"],
        ["British Indian Ocean Territory", "IO", "IOT", "86"],
        ["Brunei Darussalam", "BN", "BRN", "96"],
        ["Bulgaria", "BG", "BGR", "100"],
        ["Burkina Faso", "BF", "BFA", "854"],
        ["Burundi", "BI", "BDI", "108"],
        ["Cabo Verde", "CV", "CPV", "132"],
        ["Cambodia", "KH", "KHM", "116"],
        ["Cameroon", "CM", "CMR", "120"],
        ["Canada", "CA", "CAN", "124"],
        ["Cayman Islands", "KY", "CYM", "136"],
        ["Central African Republic", "CF", "CAF", "140"],
        ["Chad", "TD", "TCD", "148"],
        ["Chile", "CL", "CHL", "152"],
        ["China", "CN", "CHN", "156"],
        ["Christmas Island", "CX", "CXR", "162"],
        ["Cocos [Keeling] Islands", "CC", "CCK", "166"],
        ["Colombia", "CO", "COL", "170"],
        ["Comoros", "KM", "COM", "174"],
        ["Congo", "CD", "COD", "180"],
        ["Congo", "CG", "COG", "178"],
        ["Cook Islands", "CK", "COK", "184"],
        ["Costa Rica", "CR", "CRI", "188"],
        ["Croatia", "HR", "HRV", "191"],
        ["Cuba", "CU", "CUB", "192"],
        ["Cura�ao", "CW", "CUW", "531"],
        ["Cyprus", "CY", "CYP", "196"],
        ["Czechia", "CZ", "CZE", "203"],
        ["C�te d'Ivoire", "CI", "CIV", "384"],
        ["Denmark", "DK", "DNK", "208"],
        ["Djibouti", "DJ", "DJI", "262"],
        ["Dominica", "DM", "DMA", "212"],
        ["Dominican Republic", "DO", "DOM", "214"],
        ["Ecuador", "EC", "ECU", "218"],
        ["Egypt", "EG", "EGY", "818"],
        ["El Salvador", "SV", "SLV", "222"],
        ["Equatorial Guinea", "GQ", "GNQ", "226"],
        ["Eritrea", "ER", "ERI", "232"],
        ["Estonia", "EE", "EST", "233"],
        ["Eswatini", "SZ", "SWZ", "748"],
        ["Ethiopia", "ET", "ETH", "231"],
        ["Falkland Islands", "FK", "FLK", "238"],
        ["Faroe Islands", "FO", "FRO", "234"],
        ["Fiji", "FJ", "FJI", "242"],
        ["Finland", "FI", "FIN", "246"],
        ["France", "FR", "FRA", "250"],
        ["French Guiana", "GF", "GUF", "254"],
        ["French Polynesia", "PF", "PYF", "258"],
        ["French Southern Territories", "TF", "ATF", "260"],
        ["Gabon", "GA", "GAB", "266"],
        ["Gambia", "GM", "GMB", "270"],
        ["Georgia", "GE", "GEO", "268"],
        ["Germany", "DE", "DEU", "276"],
        ["Ghana", "GH", "GHA", "288"],
        ["Gibraltar", "GI", "GIB", "292"],
        ["Greece", "GR", "GRC", "300"],
        ["Greenland", "GL", "GRL", "304"],
        ["Grenada", "GD", "GRD", "308"],
        ["Guadeloupe", "GP", "GLP", "312"],
        ["Guam", "GU", "GUM", "316"],
        ["Guatemala", "GT", "GTM", "320"],
        ["Guernsey", "GG", "GGY", "831"],
        ["Guinea", "GN", "GIN", "324"],
        ["Guinea-Bissau", "GW", "GNB", "624"],
        ["Guyana", "GY", "GUY", "328"],
        ["Haiti", "HT", "HTI", "332"],
        ["Heard Island and McDonald Islands", "HM", "HMD", "334"],
        ["Holy See", "VA", "VAT", "336"],
        ["Honduras", "HN", "HND", "340"],
        ["Hong Kong", "HK", "HKG", "344"],
        ["Hungary", "HU", "HUN", "348"],
        ["Iceland", "IS", "ISL", "352"],
        ["India", "IN", "IND", "356"],
        ["Indonesia", "ID", "IDN", "360"],
        ["Iran", "IR", "IRN", "364"],
        ["Iraq", "IQ", "IRQ", "368"],
        ["Ireland", "IE", "IRL", "372"],
        ["Isle of Man", "IM", "IMN", "833"],
        ["Israel", "IL", "ISR", "376"],
        ["Italy", "IT", "ITA", "380"],
        ["Jamaica", "JM", "JAM", "388"],
        ["Japan", "JP", "JPN", "392"],
        ["Jersey", "JE", "JEY", "832"],
        ["Jordan", "JO", "JOR", "400"],
        ["Kazakhstan", "KZ", "KAZ", "398"],
        ["Kenya", "KE", "KEN", "404"],
        ["Kiribati", "KI", "KIR", "296"],
        ["Noth Korea", "KP", "PRK", "408"],
        ["South Korea", "KR", "KOR", "410"],
        ["Kuwait", "KW", "KWT", "414"],
        ["Kyrgyzstan", "KG", "KGZ", "417"],
        ["Lao People's Democratic Republic", "LA", "LAO", "418"],
        ["Latvia", "LV", "LVA", "428"],
        ["Lebanon", "LB", "LBN", "422"],
        ["Lesotho", "LS", "LSO", "426"],
        ["Liberia", "LR", "LBR", "430"],
        ["Libya", "LY", "LBY", "434"],
        ["Liechtenstein", "LI", "LIE", "438"],
        ["Lithuania", "LT", "LTU", "440"],
        ["Luxembourg", "LU", "LUX", "442"],
        ["Macao", "MO", "MAC", "446"],
        ["Madagascar", "MG", "MDG", "450"],
        ["Malawi", "MW", "MWI", "454"],
        ["Malaysia", "MY", "MYS", "458"],
        ["Maldives", "MV", "MDV", "462"],
        ["Mali", "ML", "MLI", "466"],
        ["Malta", "MT", "MLT", "470"],
        ["Marshall Islands", "MH", "MHL", "584"],
        ["Martinique", "MQ", "MTQ", "474"],
        ["Mauritania", "MR", "MRT", "478"],
        ["Mauritius", "MU", "MUS", "480"],
        ["Mayotte", "YT", "MYT", "175"],
        ["Mexico", "MX", "MEX", "484"],
        ["Micronesia", "FM", "FSM", "583"],
        ["Moldova", "MD", "MDA", "498"],
        ["Monaco", "MC", "MCO", "492"],
        ["Mongolia", "MN", "MNG", "496"],
        ["Montenegro", "ME", "MNE", "499"],
        ["Montserrat", "MS", "MSR", "500"],
        ["Morocco", "MA", "MAR", "504"],
        ["Mozambique", "MZ", "MOZ", "508"],
        ["Myanmar", "MM", "MMR", "104"],
        ["Namibia", "NA", "NAM", "516"],
        ["Nauru", "NR", "NRU", "520"],
        ["Nepal", "NP", "NPL", "524"],
        ["Netherlands", "NL", "NLD", "528"],
        ["New Caledonia", "NC", "NCL", "540"],
        ["New Zealand", "NZ", "NZL", "554"],
        ["Nicaragua", "NI", "NIC", "558"],
        ["Niger", "NE", "NER", "562"],
        ["Nigeria", "NG", "NGA", "566"],
        ["Niue", "NU", "NIU", "570"],
        ["Norfolk Island", "NF", "NFK", "574"],
        ["Northern Mariana Islands", "MP", "MNP", "580"],
        ["Norway", "NO", "NOR", "578"],
        ["Oman", "OM", "OMN", "512"],
        ["Pakistan", "PK", "PAK", "586"],
        ["Palau", "PW", "PLW", "585"],
        ["Palestine", "PS", "PSE", "275"],
        ["Panama", "PA", "PAN", "591"],
        ["Papua New Guinea", "PG", "PNG", "598"],
        ["Paraguay", "PY", "PRY", "600"],
        ["Peru", "PE", "PER", "604"],
        ["Philippines", "PH", "PHL", "608"],
        ["Pitcairn", "PN", "PCN", "612"],
        ["Poland", "PL", "POL", "616"],
        ["Portugal", "PT", "PRT", "620"],
        ["Puerto Rico", "PR", "PRI", "630"],
        ["Qatar", "QA", "QAT", "634"],
        ["Republic of North Macedonia", "MK", "MKD", "807"],
        ["Romania", "RO", "ROU", "642"],
        ["Russian Federation", "RU", "RUS", "643"],
        ["Rwanda", "RW", "RWA", "646"],
        ["R�union", "RE", "REU", "638"],
        ["Saint Barth�lemy", "BL", "BLM", "652"],
        ["Saint Helena", "SH", "SHN", "654"],
        ["Ascension", "SH", "SHN", "654"],
        ["Tristan da Cunha", "SH", "SHN", "654"],
        ["Saint Kitts and Nevis", "KN", "KNA", "659"],
        ["Saint Lucia", "LC", "LCA", "662"],
        ["Saint Martin", "MF", "MAF", "663"],
        ["Saint Pierre and Miquelon", "PM", "SPM", "666"],
        ["Saint Vincent and the Grenadines", "VC", "VCT", "670"],
        ["Samoa", "WS", "WSM", "882"],
        ["San Marino", "SM", "SMR", "674"],
        ["Sao Tome and Principe", "ST", "STP", "678"],
        ["Saudi Arabia", "SA", "SAU", "682"],
        ["Senegal", "SN", "SEN", "686"],
        ["Serbia", "RS", "SRB", "688"],
        ["Seychelles", "SC", "SYC", "690"],
        ["Sierra Leone", "SL", "SLE", "694"],
        ["Singapore", "SG", "SGP", "702"],
        ["Dutch Sint Maarten", "SX", "SXM", "534"],
        ["Slovakia", "SK", "SVK", "703"],
        ["Slovenia", "SI", "SVN", "705"],
        ["Solomon Islands", "SB", "SLB", "90"],
        ["Somalia", "SO", "SOM", "706"],
        ["South Africa", "ZA", "ZAF", "710"],
        ["South Georgia and the South Sandwich Islands", "GS", "SGS", "239"],
        ["South Sudan", "SS", "SSD", "728"],
        ["Spain", "ES", "ESP", "724"],
        ["Sri Lanka", "LK", "LKA", "144"],
        ["Sudan", "SD", "SDN", "729"],
        ["Suriname", "SR", "SUR", "740"],
        ["Svalbard and Jan Mayen", "SJ", "SJM", "744"],
        ["Sweden", "SE", "SWE", "752"],
        ["Switzerland", "CH", "CHE", "756"],
        ["Syrian Arab Republic", "SY", "SYR", "760"],
        ["Taiwan", "TW", "TWN", "158"],
        ["Tajikistan", "TJ", "TJK", "762"],
        ["Tanzania", "TZ", "TZA", "834"],
        ["Thailand", "TH", "THA", "764"],
        ["Timor-Leste", "TL", "TLS", "626"],
        ["Togo", "TG", "TGO", "768"],
        ["Tokelau", "TK", "TKL", "772"],
        ["Tonga", "TO", "TON", "776"],
        ["Trinidad and Tobago", "TT", "TTO", "780"],
        ["Tunisia", "TN", "TUN", "788"],
        ["Turkey", "TR", "TUR", "792"],
        ["Turkmenistan", "TM", "TKM", "795"],
        ["Turks and Caicos Islands", "TC", "TCA", "796"],
        ["Tuvalu", "TV", "TUV", "798"],
        ["Uganda", "UG", "UGA", "800"],
        ["Ukraine", "UA", "UKR", "804"],
        ["United Arab Emirates", "AE", "ARE", "784"],
        ["United Kingdom", "GB", "GBR", "826"],
        ["Great Britain", "GB", "GBR", "826"],
        ["United Kingdom of Great Britain and Northern Ireland", "GB", "GBR", "826"],
        ["United States Minor Outlying Islands", "UM", "UMI", "581"],
        ["United States of America", "US", "USA", "840"],
        ["Uruguay", "UY", "URY", "858"],
        ["Uzbekistan", "UZ", "UZB", "860"],
        ["Vanuatu", "VU", "VUT", "548"],
        ["Venezuela", "VE", "VEN", "862"],
        ["Viet Nam", "VN", "VNM", "704"],
        ["British Virgin Islands", "VG", "VGB", "92"],
        ["US Virgin Islands", "VI", "VIR", "850"],
        ["Wallis and Futuna", "WF", "WLF", "876"],
        ["Western Sahara", "EH", "ESH", "732"],
        ["Yemen", "YE", "YEM", "887"],
        ["Zambia", "ZM", "ZMB", "894"],
        ["Zimbabwe", "ZW", "ZWE", "716"],
        ["�land Islands", "AX", "ALA", "248"],
    ]
    
    NAMES = {country[0]: country for country in RAW_DATA}

    TWO_DIGITS = {country[1]: country for country in RAW_DATA}

    THREE_DIGITS = {country[2]: country for country in RAW_DATA}

    NUMERIC = {country[3]: country for country in RAW_DATA}
