from .. import Provider as AddressProvider


class Provider(AddressProvider):
    cities = (
        "Warszawa",
        "Kraków",
        "Łódź",
        "Wrocław",
        "Poznań",
        "Gdańsk",
        "Szczecin",
        "Bydgoszcz",
        "Lublin",
        "Katowice",
        "Białystok",
        "Gdynia",
        "Częstochowa",
        "Radom",
        "Sosnowiec",
        "Toruń",
        "Kielce",
        "Gliwice",
        "Rzeszów",
        "Zabrze",
        "Bytom",
        "Olsztyn",
        "Bielsko-Biała",
        "Ruda Śląska",
        "Rybnik",
        "Tychy",
        "Dąbrowa Górnicza",
        "Gorzów Wielkopolski",
        "Elbląg",
        "Płock",
        "Opole",
        "Wałbrzych",
        "Zielona Góra",
        "Włocławek",
        "Tarnów",
        "Chorzów",
        "Koszalin",
        "Kalisz",
        "Legnica",
        "Grudziądz",
        "Słupsk",
        "Jaworzno",
        "Jastrzębie-Zdrój",
        "Nowy Sącz",
        "Jelenia Góra",
        "Konin",
        "Piotrków Trybunalski",
        "Siedlce",
        "Inowrocław",
        "Mysłowice",
        "Piła",
        "Lubin",
        "Ostrów Wielkopolski",
        "Ostrowiec Świętokrzyski",
        "Gniezno",
        "Stargard Szczeciński",
        "Siemianowice Śląskie",
        "Suwałki",
        "Głogów",
        "Pabianice",
        "Chełm",
        "Zamość",
        "Tomaszów Mazowiecki",
        "Leszno",
        "Przemyśl",
        "Stalowa Wola",
        "Kędzierzyn-Koźle",
        "Łomża",
        "Żory",
        "Mielec",
        "Tarnowskie Góry",
        "Tczew",
        "Bełchatów",
        "Świdnica",
        "Ełk",
        "Pruszków",
        "Będzin",
        "Biała Podlaska",
        "Zgierz",
        "Piekary Śląskie",
        "Racibórz",
        "Legionowo",
        "Ostrołęka",
        "Świętochłowice",
        "Starachowice",
        "Zawiercie",
        "Wejherowo",
        "Puławy",
        "Wodzisław Śląski",
        "Starogard Gdański",
        "Skierniewice",
        "Tarnobrzeg",
        "Skarżysko-Kamienna",
        "Radomsko",
        "Krosno",
        "Rumia",
        "Dębica",
        "Kołobrzeg",
        "Kutno",
        "Nysa",
        "Ciechanów",
        "Otwock",
        "Piaseczno",
        "Zduńska Wola",
        "Sieradz",
        "Świnoujście",
        "Żyrardów",
        "Szczecinek",
        "Świdnik",
        "Chojnice",
        "Nowa Sól",
        "Oświęcim",
        "Bolesławiec",
        "Mińsk Mazowiecki",
        "Mikołów",
        "Jarosław",
        "Sanok",
        "Knurów",
        "Malbork",
        "Żary",
        "Kwidzyn",
        "Chrzanów",
        "Sopot",
        "Sochaczew",
        "Wołomin",
        "Oleśnica",
        "Brzeg",
        "Olkusz",
        "Jasło",
        "Cieszyn",
        "Kraśnik",
        "Lębork",
        "Czechowice-Dziedzice",
        "Dzierżoniów",
        "Ostróda",
        "Police",
        "Nowy Targ",
        "Iława",
        "Czeladź",
        "Myszków",
        "Żywiec",
        "Zgorzelec",
        "Oława",
        "Bielawa",
        "Swarzędz",
        "Mława",
        "Ząbki",
        "Łuków",
        "Augustów",
        "Śrem",
        "Bochnia",
        "Luboń",
        "Giżycko",
        "Grodzisk Mazowiecki",
        "Łowicz",
        "Krotoszyn",
        "Września",
        "Turek",
        "Pruszcz Gdański",
        "Brodnica",
        "Gorlice",
        "Czerwionka-Leszczyny",
        "Kłodzko",
        "Marki",
        "Nowy Dwór Mazowiecki",
        "Kętrzyn",
        "Zakopane",
        "Wyszków",
        "Biłgoraj",
        "Żagań",
        "Bielsk Podlaski",
        "Świecie",
        "Wałcz",
        "Jarocin",
        "Pszczyna",
        "Wągrowiec",
        "Szczytno",
        "Białogard",
        "Sandomierz",
        "Bartoszyce",
        "Kluczbork",
        "Lubliniec",
        "Skawina",
        "Jawor",
        "Kościan",
        "Wieluń",
        "Kościerzyna",
        "Nowa Ruda",
        "Świebodzice",
        "Koło",
        "Piastów",
        "Goleniów",
        "Ostrów Mazowiecka",
        "Polkowice",
        "Lubartów",
        "Zambrów",
        "Płońsk",
        "Reda",
        "Łaziska Górne",
        "Środa Wielkopolska",
    )

    street_prefixes_feminine = (
        "ulica",
        "aleja",
    )

    street_prefixes_masculine = ("plac",)

    street_prefixes = street_prefixes_feminine + street_prefixes_masculine

    streets_adjective_feminine = (
        "Polna",
        "Leśna",
        "Słoneczna",
        "Krótka",
        "Szkolna",
        "Ogrodowa",
        "Lipowa",
        "Brzozowa",
        "Łąkowa",
        "Kwiatowa",
        "Sosnowa",
        "Kościelna",
        "Akacjowa",
        "Parkowa",
        "Zielona",
        "Kolejowa",
        "Sportowa",
        "Dębowa",
        "Cicha",
        "Spokojna",
        "Klonowa",
        "Spacerowa",
        "Swierkowa",
        "Kasztanowa",
        "Nowa",
        "Piaskowa",
        "Rózana",
        "Topolowa",
        "Wiśniowa",
        "Dworcowa",
        "Wiejska",
        "Graniczna",
        "Długa",
        "Wrzosowa",
        "Boczna",
        "Wąska",
        "Wierzbowa",
        "Jaśminowa",
        "Wspólna",
        "Modrzewiowa",
        "Poprzeczna",
        "Wesoła",
        "Pogodna",
        "Bukowa",
        "Sadowa",
        "Górna",
        "Jodłowa",
        "Glówna",
        "Młyńska",
        "Strażacka",
        "Jesionowa",
        "Przemysłowa",
        "Osiedlowa",
        "Wiosenna",
        "Południowa",
        "Malinowa",
        "Stawowa",
        "Reymonta",
        "Zacisze",
        "Cmentarna",
        "Okrężna",
        "Miła",
        "Jasna",
        "Wodna",
        "Zamkowa",
        "Warszawska",
        "Miodowa",
        "Krzywa",
        "Dolna",
        "Podgórna",
        "Kreta",
        "Jarzębinowa",
        "Targowa",
        "Prosta",
        "Spółdzielcza",
        "Jagodowa",
        "Działkowa",
        "Orzechowa",
        "Rzemieślnicza",
        "Rzeczna",
        "Fabryczna",
        "Tęczowa",
        "Chabrowa",
        "Poziomkowa",
        "Konwaliowa",
        "Kalinowa",
        "Północna",
        "Grunwaldzka",
        "Cisowa",
        "Nadrzeczna",
        "Pocztowa",
        "Zachodnia",
        "Dąbrowskiego",
        "Grabowa",
        "Źródlana",
        "Gajowa",
        "Mostowa",
        "Wschodnia",
        "Jaworowa",
        "Poznańska",
        "Makowa",
        "Jeziorna",
        "Piękna",
        "Czereśniowa",
        "Mała",
        "Krakowska",
        "Radosna",
        "Leszczynowa",
        "Rolna",
        "Piastowska",
        "Grzybowa",
        "Podleśna",
        "Żytnia",
        "Złota",
        "Bursztynowa",
        "Żwirowa",
        "Widokowa",
        "Kamienna",
        "Jałowcowa",
        "Morelowa",
        "Myśliwska",
        "Łączna",
        "Szpitalna",
        "Wczasowa",
        "Żurawia",
        "Fiołkowa",
        "Rolnicza",
        "Tulipanowa",
        "Dworska",
        "Letnia",
        "Liliowa",
        "Owocowa",
        "Harcerska",
        "Strzelecka",
        "Wrocławska",
        "Gdańska",
        "Turystyczna",
        "Rybacka",
        "Okrzei",
        "Krucza",
        "Jagiellońska",
        "Szeroka",
        "Młynarska",
        "Olchowa",
        "Rumiankowa",
        "Stroma",
        "Starowiejska",
        "Mazowiecka",
        "Lawendowa",
        "Robotnicza",
        "Zbożowa",
        "Mokra",
        "Towarowa",
        "Dobra",
        "Środkowa",
        "Willowa",
        "Zielna",
        "Zdrojowa",
        "Opolska",
        "Agrestowa",
        "Księżycowa",
        "Zwycięstwa",
        "Letniskowa",
        "Orla",
        "Błękitna",
        "Rubinowa",
        "Brzoskwiniowa",
        "Urocza",
        "Pomorska",
        "Jeżynowa",
        "Zaciszna",
        "Porzeczkowa",
        "Krańcowa",
        "Jesienna",
        "Klasztorna",
        "Irysowa",
        "Niecała",
        "Nadbrzeżna",
        "Wałowa",
        "Strumykowa",
        "Gołębia",
        "Torowa",
        "Cegielniana",
        "Cyprysowa",
        "Słowianska",
        "Diamentowa",
        "Częstochowska",
        "Dojazdowa",
        "Przechodnia",
        "Lubelska",
        "Borówkowa",
        "Plażowa",
        "Tartaczna",
        "Jabłoniowa",
        "Ludowa",
        "Sokola",
        "Azaliowa",
        "Szmaragdowa",
        "Lipca",
        "Jastrzębia",
        "Storczykowa",
        "Wilcza",
        "Górnicza",
        "Szafirowa",
        "Handlowa",
        "Krokusowa",
        "Składowa",
        "Widok",
        "Perłowa",
        "Skośna",
        "Wypoczynkowa",
        "Chmielna",
        "Jaskółcza",
        "Nowowiejska",
        "Piwna",
        "Śląska",
        "Zaułek",
        "Głogowa",
        "Górska",
        "Truskawkowa",
        "Kaszubska",
        "Mazurska",
        "Srebrna",
        "Bociania",
        "Ptasia",
        "Cedrowa",
        "Rycerska",
        "Żabia",
        "Toruńska",
        "Podmiejska",
        "Słonecznikowa",
        "Sowia",
        "Stolarska",
        "Szczęśliwa",
        "Lazurowa",
        "Miarki",
        "Narcyzowa",
        "Browarna",
        "Majowa",
        "Orkana",
        "Skrajna",
        "Bankowa",
        "Bydgoska",
        "Piekarska",
        "Żeglarska",
        "Turkusowa",
        "Tylna",
        "Wysoka",
        "Zakątek",
        "Morska",
        "Rataja",
        "Szewska",
        "Podwale",
        "Pałacowa",
        "Magnoliowa",
        "Ceglana",
        "Wiklinowa",
        "Zakole",
        "Borowa",
        "Kolorowa",
        "Lisia",
        "Lotnicza",
        "Sarnia",
        "Wiązowa",
        "Kolonia",
        "Królewska",
        "Promienna",
        "Daleka",
        "Wiatraczna",
        "Kaliska",
        "Łanowa",
        "Średnia",
        "Wiślana",
        "Koralowa",
        "Sybiraków",
        "Kowalska",
        "Morcinka",
        "Odrzańska",
        "Okulickiego",
        "Zapolskiej",
        "Łabędzia",
        "Bałtycka",
        "Lwowska",
        "Rajska",
        "Pszenna",
        "Ciasna",
        "Hutnicza",
        "Kielecka",
    )

    streets_universal = (
        "Stycznia",
        "Maja",
        "Listopada",
        "Rynek",
        "Kościuszki",
        "Mickiewicza",
        "Sienkiewicza",
        "Słowackiego",
        "Konopnickiej",
        "Kopernika",
        "Jana Pawła II",
        "Żeromskiego",
        "Wojska Polskiego",
        "Wolności",
        "Prusa",
        "Sikorskiego",
        "Chopina",
        "Piłsudskiego",
        "Kochanowskiego",
        "Armii Krajowej",
        "Witosa",
        "Reja",
        "Partyzantów",
        "Kilińskiego",
        "Moniuszki",
        "Orzeszkowej",
        "Staszica",
        "Bolesława Chrobrego",
        "Wyszyńskiego",
        "Matejki",
        "Norwida",
        "Asnyka",
        "Paderewskiego",
        "Wyspiańskiego",
        "Broniewskiego",
        "Tuwima",
        "Bema",
        "Traugutta",
        "Jadwigi",
        "Wyzwolenia",
        "Krasickiego",
        "Kazimierza Wielkiego",
        "Mieszka I",
        "Głowackiego",
        "Władysława Jagiełły",
        "Pułaskiego",
        "Stefana Batorego",
        "Kołłątaja",
        "Kraszewskiego",
        "Władysława Łokietka",
        "Żwirki i Wigury",
        "Niepodległości",
        "Poniatowskiego",
        "Korczaka",
        "Narutowicza",
        "Świerczewskiego",
        "Kasprowicza",
        "Jana III Sobieskiego",
        "Powstańców Śląskich",
        "Powstańców Wielkopolskich",
        "Fredry",
        "Andersa",
        "Baczyńskiego",
        "Batalionów Chłopskich",
        "Dąbrowskiej",
        "Skłodowskiej-Curie",
        "Gałczyńskiego",
        "Krasińskiego",
        "Szymanowskiego",
        "Czarnieckiego",
        "Nałkowskiej",
        "Wybickiego",
        "Szarych Szeregów",
        "Słowicza",
        "Drzymały",
        "Waryńskiego",
        "Hallera",
        "Plater",
        "Popiełuszki",
        "Chełmońskiego",
        "Daszyńskiego",
        "Kossaka",
        "Skargi",
        "Staffa",
        "Tysiąclecia",
        "Brzechwy",
        "Kusocińskiego",
        "Długosza",
        "Kosynierów",
        "Wieniawskiego",
        "Powstańców",
        "Sucharskiego",
        "Bolesława Krzywoustego",
        "Konarskiego",
        "Konstytucji 3 Maja",
        "Miłosza",
        "Malczewskiego",
        "Jana",
        "Maczka",
        "Sawickiej",
        "Ściegiennego",
        "Grottgera",
        "Jana Sobieskiego",
        "Rejtana",
        "Wróblewskiego",
        "Kruczkowskiego",
        "Lelewela",
        "Makuszyńskiego",
        "Solidarności",
        "Wojciecha",
        "Korfantego",
        "Floriana",
    )

    streets = streets_adjective_feminine + streets_universal

    regions = (
        "Dolnośląskie",
        "Kujawsko - pomorskie",
        "Lubelskie",
        "Lubuskie",
        "Łódzkie",
        "Małopolskie",
        "Mazowieckie",
        "Opolskie",
        "Podkarpackie",
        "Podlaskie",
        "Pomorskie",
        "Śląskie",
        "Świętokrzyskie",
        "Warmińsko - mazurskie",
        "Wielkopolskie",
        "Zachodniopomorskie",
    )

    building_number_formats = ("##", "###", "##/##")
    postcode_formats = ("##-###",)
    street_address_formats = (
        "{{street_prefix_feminine}} {{street_name_adjective_feminine}} {{building_number}}",
        "{{street_prefix_feminine}} {{street_name_universal}} {{building_number}}",
        "{{street_prefix_masculine}} {{street_name_universal}} {{building_number}}",
        "{{street_prefix_feminine_short}} {{street_name_adjective_feminine}} {{building_number}}",
        "{{street_prefix_feminine_short}} {{street_name_universal}} {{building_number}}",
        "{{street_prefix_masculine_short}} {{street_name_universal}} {{building_number}}",
    )
    address_formats = ("{{street_address}}\n{{postcode}} {{city}}",)

    def street_prefix(self) -> str:
        """
        Randomly returns a street prefix
        :example: 'aleja'
        """
        return self.random_element(self.street_prefixes)

    def street_prefix_feminine(self) -> str:
        """
        Randomly returns a feminine street prefix
        :example: 'aleja'
        """
        return self.random_element(self.street_prefixes_feminine)

    def street_prefix_masculine(self) -> str:
        """
        Randomly returns a masculine street prefix
        :example: 'plac'
        """
        return self.random_element(self.street_prefixes_masculine)

    def street_prefix_short(self) -> str:
        """
        Randomly returns an abbreviation of the street prefix.
        :example: 'al.'
        """
        return self.random_element(self.street_prefixes)[:2] + "."  # type: ignore

    def street_prefix_feminine_short(self) -> str:
        """
        Randomly returns an abbreviation of the feminine street prefix.
        :example: 'al.'
        """
        return self.random_element(self.street_prefixes_feminine)[:2] + "."  # type: ignore

    def street_prefix_masculine_short(self) -> str:
        """
        Randomly returns an abbreviation of the masculine street prefix.
        :example: 'pl.'
        """
        return self.random_element(self.street_prefixes_masculine)[:2] + "."  # type: ignore

    def street_name(self) -> str:
        """
        Randomly returns a street name
        :example: 'Wróblewskiego'
        """
        return self.random_element(self.streets)

    def street_name_adjective_feminine(self) -> str:
        """
        Randomly returns an adjective feminine street name
        :example: 'Zielona'
        """
        return self.random_element(self.streets_adjective_feminine)

    def street_name_universal(self) -> str:
        """
        Randomly returns a universal street name
        :example: 'Wróblewskiego'
        """
        return self.random_element(self.streets_universal)

    def city(self) -> str:
        """
        Randomly returns a city name
        :example: 'Konin'
        """
        return self.random_element(self.cities)

    def administrative_unit(self) -> str:
        """
        :example: 'Wielkopolskie'
        """
        return self.random_element(self.regions)

    def postcode(self) -> str:
        """
        :example: '62-200'
        """
        return "%02d-%03d" % (self.generator.random.randint(1, 99), self.generator.random.randint(1, 999))

    def zipcode(self) -> str:
        """
        :example: '62-200'
        """
        return self.postcode()

    def postalcode(self) -> str:
        """
        :example: '62-200'
        """
        return self.postcode()

    region = administrative_unit
