from .. import Provider as AddressProvider


class Provider(AddressProvider):
    """Address provider for mk_MK locale (Macedonian).

    Sources:
    - https://en.wikipedia.org/wiki/List_of_cities_in_North_Macedonia
    - https://en.wikipedia.org/wiki/List_of_sovereign_states
    """

    city_formats = ("{{city_name}}",)

    street_name_formats = ("{{street_name}}",)
    street_address_formats = ("{{street_name}} {{building_number}}",)
    address_formats = ("{{street_address}}\n{{postcode}} {{city}}",)

    building_number_formats = (
        "###",
        "##",
        "#",
        "#а",
        "#б",
        "#в",
        "#а/#",
        "#б/#",
    )

    postcode_formats = ("#####",)

    street_suffixes_long = (
        "",
        "улица",
        "булевар",
        "пат",
        "авенија",
    )

    street_suffixes_short = (
        "",
        "ул.",
        "бул.",
        "п.",
        "а.",
    )

    cities = (
        "Берово",  # Berovo
        "Битола",  # Bitola
        "Богданци",  # Bogdanci
        "Валандово",  # Valandovo
        "Велес",  # Veles
        "Виница",  # Vinica
        "Гевгелија",  # Gevgelija
        "Гостивар",  # Gostivar
        "Дебар",  # Debar
        "Делчево",  # Delčevo
        "Демир Капија",  # Demir Kapija
        "Демир Хисар",  # Demir Hisar
        "Кавадарци",  # Kavadarci
        "Кичево",  # Kičevo
        "Кочани",  # Kočani
        "Кратово",  # Kratovo
        "Крива Паланка",  # Kriva Palanka
        "Крушево",  # Kruševo
        "Куманово",  # Kumanovo
        "Македонска Каменица",  # Makedonska Kamenica
        "Македонски Брод",  # Makedonski Brod
        "Неготино",  # Negotino
        "Охрид",  # Ohrid
        "Пехчево",  # Pehčevo
        "Прилеп",  # Prilep
        "Пробиштип",  # Probištip
        "Радовиш",  # Radoviš
        "Ресен",  # Resen
        "Свети Николе",  # Sveti Nikole
        "Скопје",  # Skopje
        "Струга",  # Struga
        "Струмица",  # Strumica
        "Тетово",  # Tetovo
        "Штип",  # Štip
    )

    # Source: OpenStreetMap Overpass API — named roads in Скопје
    streets = (
        "Македонија",
        "Партизански одреди",
        "Илинденска",
        "Димитар Влахов",
        "Кеј Димитар Влахов",
        "Кеј Македонија",
        "Орце Николов",
        "Никола Карев",
        "Климент Охридски",
        "Крсте Мисирков",
        "Гоце Делчев",
        "Даме Груев",
        "Јане Сандански",
        "Христијан Тодоровски Карпош",
        "Питу Гули",
        "Тодор Александров",
        "Свети Климент Охридски",
        "Благој Давков",
        "Наум Охридски",
        "Булевар Александар Македонски",
        "Булевар Блаже Конески",
        "Булевар Гоце Делчев",
        "Булевар Никола Карев",
        "Булевар Партизански одреди",
        "Булевар Свети Климент Охридски",
        "Булевар Цветан Димов",
        "Самоилова",
        "Глигор Прличев",
        "Ибрахим Темо",
        "Васил Главинов",
        "Никола Вапцаров",
        "Маршал Тито",
        "Едвард Кардељ",
        "Георги Димитров",
        "Михаило Апостолски",
        "Михаило Пупин",
        "Перо Наков",
        "Петар Поп Арсов",
        "Јован Хаџи Константинов Џинот",
        "Кирил Пејчиновиќ",
        "Лазар Личеноски",
        "Никола Русински",
        "Аристотел",
        "Луј Пастер",
        "Николај Коперник",
        "Стоби",
        "Скупи",
        "Дојранска",
        "Воденска",
        "Софиска",
        "Варшавска",
        "Виенска",
        "Женевска",
        "Лондонска",
        "Букурешка",
        "Будимпештанска",
        "Хелсинки",
        "Бриселска",
        "Ленинградска",
        "Волгоградска",
        "Крушевска",
        "Радовишка",
        "Трета македонска бригада",
        "Пролетерска",
        "Востаничка",
        "Одбранбена",
        "Зелезничка",
        "Рибарска",
        "Јасминска",
        "Природна",
        "Шарпланинска",
        "Славеј Планина",
    )

    states = (
        "Скопски",
        "Пелагониски",
        "Полошки",
        "Вардарски",
        "Источен",
        "Западен",
        "Југозападен",
        "Југоисточен",
        "Североисточен",
        "Централен",
    )

    countries = (
        "Авганистан",
        "Австралија",
        "Австрија",
        "Азербејџан",
        "Албанија",
        "Алжир",
        "Андора",
        "Ангола",
        "Антигва и Барбуда",
        "Аргентина",
        "Ерменија",
        "Бахами",
        "Бахреин",
        "Бангладеш",
        "Барбадос",
        "Белорусија",
        "Белгија",
        "Белизе",
        "Бенин",
        "Бутан",
        "Боливија",
        "Босна и Херцеговина",
        "Боцвана",
        "Бразил",
        "Брунеј",
        "Бугарија",
        "Буркина Фасо",
        "Бурунди",
        "Кабо Верде",
        "Камбоџа",
        "Камерун",
        "Канада",
        "Централноафриканска Република",
        "Чад",
        "Чиле",
        "Кина",
        "Колумбија",
        "Коморски Острови",
        "Демократска Република Конго",
        "Република Конго",
        "Коста Рика",
        "Кот д'Ивоар",
        "Хрватска",
        "Куба",
        "Кипар",
        "Чешка",
        "Данска",
        "Џибути",
        "Доминика",
        "Доминиканска Република",
        "Источен Тимор",
        "Еквадор",
        "Египет",
        "Ел Салвадор",
        "Екваторска Гвинеја",
        "Еритреја",
        "Естонија",
        "Есватини",
        "Етиопија",
        "Фиџи",
        "Финска",
        "Франција",
        "Габон",
        "Гамбија",
        "Грузија",
        "Германија",
        "Гана",
        "Грција",
        "Гренада",
        "Гватемала",
        "Гвинеја",
        "Гвинеја Бисао",
        "Гајана",
        "Хаити",
        "Хондурас",
        "Унгарија",
        "Исланд",
        "Индија",
        "Индонезија",
        "Иран",
        "Ирак",
        "Ирска",
        "Израел",
        "Италија",
        "Јамајка",
        "Јапонија",
        "Јордан",
        "Казахстан",
        "Кенија",
        "Кирибати",
        "Северна Кореја",
        "Јужна Кореја",
        "Косово",
        "Кувајт",
        "Киргистан",
        "Лаос",
        "Латвија",
        "Либан",
        "Лесото",
        "Либерија",
        "Либија",
        "Лихтенштајн",
        "Литванија",
        "Луксембург",
        "Мадагаскар",
        "Малави",
        "Малезија",
        "Малдиви",
        "Мали",
        "Малта",
        "Маршалски Острови",
        "Мавританија",
        "Маврициус",
        "Мексико",
        "Микронезија",
        "Молдавија",
        "Монако",
        "Монголија",
        "Черна Гора",
        "Мароко",
        "Мозамбик",
        "Мјанмар",
        "Намибија",
        "Науру",
        "Непал",
        "Холандија",
        "Нов Зеланд",
        "Никарагва",
        "Нигер",
        "Нигерија",
        "Северна Македонија",
        "Норвешка",
        "Оман",
        "Пакистан",
        "Палау",
        "Панама",
        "Папуа Нова Гвинеја",
        "Парагвај",
        "Перу",
        "Филипини",
        "Полска",
        "Португалија",
        "Катар",
        "Романија",
        "Русија",
        "Руанда",
        "Сент Китс и Невис",
        "Света Луција",
        "Сент Винсент и Гренадини",
        "Самоа",
        "Сан Марино",
        "Саудиска Арабија",
        "Сенегал",
        "Србија",
        "Сејшели",
        "Сиера Леоне",
        "Сингапур",
        "Словачка",
        "Словенија",
        "Соломонски Острови",
        "Сомалија",
        "Јужна Африка",
        "Јужен Судан",
        "Шпанија",
        "Шри Ланка",
        "Судан",
        "Суринам",
        "Шведска",
        "Швајцарија",
        "Сирија",
        "Тајван",
        "Таџикистан",
        "Танзанија",
        "Тајланд",
        "Того",
        "Тонга",
        "Тринидад и Тобаго",
        "Тунис",
        "Турција",
        "Туркменистан",
        "Тувалу",
        "Уганда",
        "Украина",
        "Обединети Арапски Емирати",
        "Обединето Кралство",
        "Соединети Американски Држави",
        "Уругвај",
        "Узбекистан",
        "Вануату",
        "Ватикан",
        "Венецуела",
        "Виетнам",
        "Јемен",
        "Замбија",
        "Зимбабве",
    )

    def city_name(self) -> str:
        return self.random_element(self.cities)

    def street_name(self) -> str:
        return self.random_element(self.streets)

    def administrative_unit(self) -> str:
        return self.random_element(self.states)

    state = administrative_unit
