from random import randint

from .base import FieldGenerator

# Pulled from https://github.com/umpirsky/country-list
countries = ("Afghanistan",
             "Åland Islands",
             "Albania",
             "Algeria",
             "American Samoa",
             "Andorra",
             "Angola",
             "Anguilla",
             "Antarctica",
             "Antigua & Barbuda",
             "Argentina",
             "Armenia",
             "Aruba",
             "Australia",
             "Austria",
             "Azerbaijan",
             "Bahamas",
             "Bahrain",
             "Bangladesh",
             "Barbados",
             "Belarus",
             "Belgium",
             "Belize",
             "Benin",
             "Bermuda",
             "Bhutan",
             "Bolivia",
             "Bosnia & Herzegovina",
             "Botswana",
             "Bouvet Island",
             "Brazil",
             "British Indian Ocean Territory",
             "British Virgin Islands",
             "Brunei",
             "Bulgaria",
             "Burkina Faso",
             "Burundi",
             "Cambodia",
             "Cameroon",
             "Canada",
             "Cape Verde",
             "Caribbean Netherlands",
             "Cayman Islands",
             "Central African Republic",
             "Chad",
             "Chile",
             "China",
             "Christmas Island",
             "Cocos (Keeling) Islands",
             "Colombia",
             "Comoros",
             "Congo - Brazzaville",
             "Congo - Kinshasa",
             "Cook Islands",
             "Costa Rica",
             "Côte d’Ivoire",
             "Croatia",
             "Cuba",
             "Curaçao",
             "Cyprus",
             "Czechia",
             "Denmark",
             "Djibouti",
             "Dominica",
             "Dominican Republic",
             "Ecuador",
             "Egypt",
             "El Salvador",
             "Equatorial Guinea",
             "Eritrea",
             "Estonia",
             "Eswatini",
             "Ethiopia",
             "Falkland Islands",
             "Faroe Islands",
             "Fiji",
             "Finland",
             "France",
             "French Guiana",
             "French Polynesia",
             "French Southern Territories",
             "Gabon",
             "Gambia",
             "Georgia",
             "Germany",
             "Ghana",
             "Gibraltar",
             "Greece",
             "Greenland",
             "Grenada",
             "Guadeloupe",
             "Guam",
             "Guatemala",
             "Guernsey",
             "Guinea",
             "Guinea-Bissau",
             "Guyana",
             "Haiti",
             "Heard & McDonald Islands",
             "Honduras",
             "Hong Kong SAR China",
             "Hungary",
             "Iceland",
             "India",
             "Indonesia",
             "Iran",
             "Iraq",
             "Ireland",
             "Isle of Man",
             "Israel",
             "Italy",
             "Jamaica",
             "Japan",
             "Jersey",
             "Jordan",
             "Kazakhstan",
             "Kenya",
             "Kiribati",
             "Kuwait",
             "Kyrgyzstan",
             "Laos",
             "Latvia",
             "Lebanon",
             "Lesotho",
             "Liberia",
             "Libya",
             "Liechtenstein",
             "Lithuania",
             "Luxembourg",
             "Macao SAR China",
             "Madagascar",
             "Malawi",
             "Malaysia",
             "Maldives",
             "Mali",
             "Malta",
             "Marshall Islands",
             "Martinique",
             "Mauritania",
             "Mauritius",
             "Mayotte",
             "Mexico",
             "Micronesia",
             "Moldova",
             "Monaco",
             "Mongolia",
             "Montenegro",
             "Montserrat",
             "Morocco",
             "Mozambique",
             "Myanmar (Burma)",
             "Namibia",
             "Nauru",
             "Nepal",
             "Netherlands",
             "New Caledonia",
             "New Zealand",
             "Nicaragua",
             "Niger",
             "Nigeria",
             "Niue",
             "Norfolk Island",
             "North Korea",
             "North Macedonia",
             "Northern Mariana Islands",
             "Norway",
             "Oman",
             "Pakistan",
             "Palau",
             "Palestinian Territories",
             "Panama",
             "Papua New Guinea",
             "Paraguay",
             "Peru",
             "Philippines",
             "Pitcairn Islands",
             "Poland",
             "Portugal",
             "Puerto Rico",
             "Qatar",
             "Réunion",
             "Romania",
             "Russia",
             "Rwanda",
             "Samoa",
             "San Marino",
             "São Tomé & Príncipe",
             "Saudi Arabia",
             "Senegal",
             "Serbia",
             "Seychelles",
             "Sierra Leone",
             "Singapore",
             "Sint Maarten",
             "Slovakia",
             "Slovenia",
             "Solomon Islands",
             "Somalia",
             "South Africa",
             "South Georgia & South Sandwich Islands",
             "South Korea",
             "South Sudan",
             "Spain",
             "Sri Lanka",
             "St. Barthélemy",
             "St. Helena",
             "St. Kitts & Nevis",
             "St. Lucia",
             "St. Martin",
             "St. Pierre & Miquelon",
             "St. Vincent & Grenadines",
             "Sudan",
             "Suriname",
             "Svalbard & Jan Mayen",
             "Sweden",
             "Switzerland",
             "Syria",
             "Taiwan",
             "Tajikistan",
             "Tanzania",
             "Thailand",
             "Timor-Leste",
             "Togo",
             "Tokelau",
             "Tonga",
             "Trinidad & Tobago",
             "Tunisia",
             "Turkey",
             "Turkmenistan",
             "Turks & Caicos Islands",
             "Tuvalu",
             "U.S. Outlying Islands",
             "U.S. Virgin Islands",
             "Uganda",
             "Ukraine",
             "United Arab Emirates",
             "United Kingdom",
             "United States",
             "Uruguay",
             "Uzbekistan",
             "Vanuatu",
             "Vatican City",
             "Venezuela",
             "Vietnam",
             "Wallis & Futuna",
             "Western Sahara",
             "Yemen",
             "Zambia",
             "Zimbabwe")

count = len(countries) - 1


class CountryFieldGenerator(FieldGenerator):
    def generate(self, **_):
        return countries[randint(0, count)]
