country_data = [
    {
        'name': 'Albania',
        'alpha_2': 'AL',
        'length': 28,
    },
    {
        'name': 'Andorra',
        'alpha_2': 'AD',
        'length': 24,
    },
    {
        'name': 'Austria',
        'alpha_2': 'AT',
        'length': 20,
    },
    {
        'name': 'Azerbaijan',
        'alpha_2': 'AZ',
        'length': 28,
    },
    {
        'name': 'Behrain',
        'alpha_2': 'BH',
        'length': 22,
    },
    {
        'name': 'Belarus',
        'alpha_2': 'BY',
        'length': 28,
    },
    {
        'name': 'Belgium',
        'alpha_2': 'BE',
        'length': 16,
    },
    {
        'name': 'Bosnia and Herzegovina',
        'alpha_2': 'BA',
        'length': 20,
    },
    {
        'name': 'Brazil',
        'alpha_2': 'BR',
        'length': 29,
    },
    {
        'name': 'Bulgaria',
        'alpha_2': 'BG',
        'length': 22,
    },
    {
        'name': 'Costa Rica',
        'alpha_2': 'CR',
        'length': 21,
    },
    {
        'name': 'Cyprus',
        'alpha_2': 'CY',
        'length': 28,
    },
    {
        'name': 'Czech Republic',
        'alpha_2': 'CZ',
        'length': 24,
    },
    {
        'name': 'Denmark',
        'alpha_2': 'DK',
        'length': 18,
    },
    {
        'name': 'Dominican Republic',
        'alpha_2': 'DO',
        'length': 28,
    },
    {
        'name': 'East Timor',
        'alpha_2': 'TL',
        'length': 23,
    },
    {
        'name': 'Estonia',
        'alpha_2': 'EE',
        'length': 20,
    },
    {
        'name': 'Faroe Islands',
        'alpha_2': 'FO',
        'length': 18,
    },
    {
        'name': 'Finland',
        'alpha_2': 'FI',
        'length': 18,
    },
    {
        'name': 'France',
        'alpha_2': 'FR',
        'length': 27,
    },
    {
        'name': 'Georgia',
        'alpha_2': 'GE',
        'length': 22,
    },
    {
        'name': 'Germany',
        'alpha_2': 'DE',
        'length': 22,
    },
    {
        'name': 'Gibraltar',
        'alpha_2': 'GI',
        'length': 23,
    },
    {
        'name': 'Greece',
        'alpha_2': 'GR',
        'length': 27,
    },
    {
        'name': 'Greenland',
        'alpha_2': 'GL',
        'length': 18,
    },
    {
        'name': 'Guatemala',
        'alpha_2': 'GT',
        'length': 28,
    },
    {
        'name': 'Hungary',
        'alpha_2': 'HU',
        'length': 28,
    },
    {
        'name': 'Iceland',
        'alpha_2': 'IS',
        'length': 26,
    },
    {
        'name': 'Ireland',
        'alpha_2': 'IE',
        'length': 22,
    },
    {
        'name': 'Israel',
        'alpha_2': 'IL',
        'length': 23,
    },
    {
        'name': 'Italy',
        'alpha_2': 'IT',
        'length': 27,
    },
    {
        'name': 'Jordan',
        'alpha_2': 'JO',
        'length': 30,
    },
    {
        'name': 'Kazakhstan',
        'alpha_2': 'KZ',
        'length': 20,
    },
    {
        'name': 'Kosovo',
        'alpha_2': 'XK',
        'length': 20,
    },
    {
        'name': 'Kuwait',
        'alpha_2': 'KW',
        'length': 30,
    },
    {
        'name': 'Latvia',
        'alpha_2': 'LV',
        'length': 21,
    },
    {
        'name': 'Lebanon',
        'alpha_2': 'LB',
        'length': 28,
    },
    {
        'name': 'Liechtenstein',
        'alpha_2': 'LI',
        'length': 21,
    },
    {
        'name': 'Lithuania',
        'alpha_2': 'LT',
        'length': 20,
    },
    {
        'name': 'Luxembourg',
        'alpha_2': 'LU',
        'length': 20,
    },
    {
        'name': 'North Macedonia',
        'alpha_2': 'MK',
        'length': 19,
    },
    {
        'name': 'Malta',
        'alpha_2': 'MT',
        'length': 31,
    },
    {
        'name': 'Mauritania',
        'alpha_2': 'MR',
        'length': 27,
    },
    {
        'name': 'Mauritius',
        'alpha_2': 'MU',
        'length': 30,
    },
    {
        'name': 'Monaco',
        'alpha_2': 'MC',
        'length': 27,
    },
    {
        'name': 'Moldova',
        'alpha_2': 'MD',
        'length': 24,
    },
    {
        'name': 'Montenegro',
        'alpha_2': 'ME',
        'length': 22,
    },
    {
        'name': 'Netherlands',
        'alpha_2': 'NL',
        'length': 18,
    },
    {
        'name': 'Norway',
        'alpha_2': 'NO',
        'length': 15,
    },
    {
        'name': 'Pakistan',
        'alpha_2': 'PK',
        'length': 24,
    },
    {
        'name': 'Palestinian territories',
        'alpha_2': 'PK',
        'length': 29,
    },
    {
        'name': 'Poland',
        'alpha_2': 'PL',
        'length': 28,
    },
    {
        'name': 'Portugal',
        'alpha_2': 'PT',
        'length': 25,
    },
    {
        'name': 'Qatar',
        'alpha_2': 'QA',
        'length': 29,
    },
    {
        'name': 'Romania',
        'alpha_2': 'RO',
        'length': 24,
    },
    {
        'name': 'San Marino',
        'alpha_2': 'SM',
        'length': 27,
    },
    {
        'name': 'Saudi Arabia',
        'alpha_2': 'SA',
        'length': 24,
    },
    {
        'name': 'Serbia',
        'alpha_2': 'RS',
        'length': 24,
    },
    {
        'name': 'Slovakia',
        'alpha_2': 'SK',
        'length': 24,
    },
    {
        'name': 'Slovenia',
        'alpha_2': 'SI',
        'length': 19,
    },
    {
        'name': 'Spain',
        'alpha_2': 'ES',
        'length': 24,
    },
    {
        'name': 'Sweden',
        'alpha_2': 'SE',
        'length': 24,
    },
    {
        'name': 'Switzerland',
        'alpha_2': 'CH',
        'length': 21,
    },
    {
        'name': 'Tunisia',
        'alpha_2': 'TN',
        'length': 24,
    },
    {
        'name': 'Turkey',
        'alpha_2': 'TR',
        'length': 26,
    },
    {
        'name': 'United Arab Emirates',
        'alpha_2': 'AE',
        'length': 23,
    },
    {
        'name': 'United Kingdom',
        'alpha_2': 'GB',
        'length': 22,
    },
    {
        'name': 'Vatican City',
        'alpha_2': 'VA',
        'length': 22,
    },
    {
        'name': 'Virgin Islands, British',
        'alpha_2': 'VG',
        'length': 24,
    },
    {
        'name': 'Algeria',
        'alpha_2': 'DZ',
        'length': 24,
    },
    {
        'name': 'Angola',
        'alpha_2': 'AO',
        'length': 25,
    },
    {
        'name': 'Benin',
        'alpha_2': 'BJ',
        'length': 28,
    },
    {
        'name': 'Burkina Faso',
        'alpha_2': 'BF',
        'length': 28,
    },
    {
        'name': 'Burundi',
        'alpha_2': 'BI',
        'length': 16,
    },
    {
        'name': 'Cameroon',
        'alpha_2': 'CM',
        'length': 27,
    },
    {
        'name': 'Cape Verde',
        'alpha_2': 'CV',
        'length': 25,
    },
    {
        'name': 'Iran',
        'alpha_2': 'IR',
        'length': 26,
    },
    {
        'name': 'Ivory Coast',
        'alpha_2': 'CI',
        'length': 28,
    },
    {
        'name': 'Madagascar',
        'alpha_2': 'MG',
        'length': 27,
    },
    {
        'name': 'Mali',
        'alpha_2': 'ML',
        'length': 28,
    },
    {
        'name': 'Mozambique',
        'alpha_2': 'MZ',
        'length': 25,
    },
    {
        'name': 'Senegal',
        'alpha_2': 'SN',
        'length': 28,
    },
    {
        'name': 'Ukraine',
        'alpha_2': 'UA',
        'length': 29,
    },
    {
        'name': 'Comoros',
        'alpha_2': 'KM',
        'length': 27,
    },
    {
        'name': 'Chad',
        'alpha_2': 'TD',
        'length': 27,
    },
    {
        'name': 'Congo',
        'alpha_2': 'CG',
        'length': 27,
    },
    {
        'name': 'Egypt',
        'alpha_2': 'EG',
        'length': 27,
    },
    {
        'name': 'Gabon',
        'alpha_2': 'GA',
        'length': 27,
    },
    {
        'name': 'Honduras',
        'alpha_2': 'HN',
        'length': 28,
    },
    {
        'name': 'Morocco',
        'alpha_2': 'MA',
        'length': 28,
    },
    {
        'name': 'Nicaragua',
        'alpha_2': 'NI',
        'length': 32,
    },
    {
        'name': 'Niger',
        'alpha_2': 'NE',
        'length': 28,
    },
    {
        'name': 'Togo',
        'alpha_2': 'TG',
        'length': 28,
    }
]


class Countries:
    def __init__(self):
        self.countries = []
        for country in country_data:
            self.countries.append(Country(**country))

    def get(self, name=None, alpha_2=None):
        if name:
            for country in self.countries:
                if country.name.lower() == name.lower():
                    return country

        if alpha_2:
            for country in self.countries:
                if country.alpha_2.upper() == alpha_2.upper():
                    return country
        return None


class Country:
    def __init__(self, name: str, alpha_2: str, length: int):
        self.name = name
        self.alpha_2 = alpha_2
        self.length = length
