# script zum verlinken 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']}"""
    table = conn_config['connection']['table']

    url = conn_config['connection']['url']
    # logfile = r"geocoder.log"

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

    schulen = my_db.select_adress(table)
    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["uri"]
            my_db.update_uri(str(item[0]), areg_uri, table)
            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

            progress_msg = (f"{areg_response_key[0]} : " +
                            f"{areg_response[areg_response_key[0]]} | " +
                            f"betroffene schule: [{item[0]}]\t{adresse['hnr']};" +  # noqa
                            f" {adresse['stn']}; {adresse['plz']}; " +
                            f"{adresse['ort']}")

            print(progress_msg)

    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)
    statistics = (f"statistics:\n {numfeatures} from {maxfeatures} linked" +
                  f" >> {percentage}%\n {missinfeatures} features with " +
                  f"missing attributes\n {errorfeatures} features with " +
                  f"errors\n")
    print(statistics)
    print("linking dataset finished, closing programm")