import json

import mariadb

from lib.domain.BaseModel import database


class AddressDAO:
    __cur = None

    def __init__(self):
        self.__con = database.connection()

        if self.__con:
            self.__cur = self.__con.cursor()

    def __importPlz(self):
        with open("pfad zur datei", "r") as plz:
            postcodes = json.load(plz)
            irgendwas = ""
            try:
                for i in postcodes:
                    test = i["plz_name"].split(",")
                    for town in test:
                        if "u.a" in town:
                            town = town[:-4]
                        town = town.strip()
                        if town:
                            print(f"PROCESSING {i['name']} {town}")
                            self.__cur.callproc("addZipCodes", (i["name"], town, irgendwas,))
                # self.__cur.callproc("addZipCodes", ("56271", "Kleinmaischeid", irgendwas,))
            except mariadb.OperationalError as e:
                print(f"Database Error: {e}")
            finally:
                self.__con.commit()
                print("FINISHED")  #

    def __importCountry(self):
        with open("pfad zur datei", "r") as country:
            countries = json.load(country)
            old = ""
            try:
                for i in countries["daten"]:
                    if i[4] == "–":
                        continue
                    elif i[8] == "YU":
                        continue
                    elif i[4] == old:
                        continue
                    elif i[4] == "Serbien und Montenegro":
                        continue
                    elif i[4] == "Bosnien und Herzegowina":
                        continue

                    print(i[4], i[3], i[2], i[8], i[7])

                    self.__cur.execute(
                        "INSERT INTO country (country, countryshort, nationality, iso2, iso3) VALUES (%s, %s, %s, %s, %s)",
                        (i[4], i[3], i[2], i[8], i[7]))
                    old = i[4]
            except mariadb.OperationalError as e:
                print(f"Database Error: {e}")
            finally:
                self.__con.commit()
                print("FINISHED")  #

    def getAddressData(self, all=True, zipcode=None):
        try:
            if self.__cur:
                self.__cur.callproc("getAddress", (all, zipcode,))
                self.__data = self.__cur.fetchall()
                return self.__data
            else:
                return None
        except mariadb.Error as e:
            print(str(e))
