# script zum geocoden der schulen und zuweisen der URI aus dem AREG
from script_helper import DBTools, APITools
from configparser import ConfigParser


if __name__ == '__main__':
    print("geocoding dataset now")
    # datenbank mit den schuldaten
    conn_config = ConfigParser()
    conn_config.read("db_conn.cfg")
    conn_str = f"host={conn_config['connection']['host']} port={conn_config['connection']['port']} dbname={conn_config['connection']['dbname']} user={conn_config['connection']['user']} password={conn_config['connection']['pwd']}"
    url = r"https://chat.gdi-sh.de/aregapi/"
    # logfile = r"geocoder.log"

    my_db = DBTools(conn_str)
    my_api = APITools(url)

    schulen = my_db.select_adress()
    adresse = {}
    maxfeatures = len(schulen)
    numfeatures = 0
    errorfeatures = 0
    missinfeatures = 0
    log = []

    for item in schulen:
        adresse["hnr"] = item[1]
        adresse["stn"] = item[2]
        adresse["plz"] = item[3]
        adresse["ort"] = item[4]

        areg_response = my_api.geocode(adresse)

        if areg_response.get("uri") is not None:
            areg_uri = areg_response.get("uri")
            my_db.update_uri(str(item[0]), areg_uri)
            numfeatures += 1
        else:
            areg_response_key = list(areg_response.keys())

            if areg_response_key[0] == "MISSING":
                missinfeatures += 1
            if areg_response_key[0] == "ERROR":
                errorfeatures += 1

            # log.append(areg_response_key[0] + ": " + areg_response.get(areg_response_key[0]) + f" | betroffene schule: {adresse['hnr']}\t{adresse['stn']}\t{adresse['plz']}\t{adresse['ort']}")
            print(areg_response_key[0] + ": " + areg_response.get(areg_response_key[0]) + f" | betroffene schule: [{item[0]}]\t{adresse['hnr']}; {adresse['stn']}; {adresse['plz']}; {adresse['ort']}")

    my_db.closecursor()

    # sorgt auf dem cloudserver fuer fehler wegen permission
    # with open(logfile, "w", encoding='utf-8') as out:
    #     for item in log:
    #         out.write(item)

    percentage = round((numfeatures * 100) / maxfeatures, 2)
    print(f"\nstatistics:\n {numfeatures} from {maxfeatures} geocoded >> {percentage}%\n {missinfeatures} features with missing attributes\n {errorfeatures} features with errors\n")
    print("geocoding dataset finished, closing programm")