import csv
import os

from jit_oracle_connection import JitOracleConnection

import argparse


def main():
    count = 0
    instantclient_path = r"\\195.243.223.3\sivas_schreiben\jit\oracle\bin\x64"
    conn = JitOracleConnection(db_host='195.243.223.3', db_sid='linux', db_user='sivas', db_pwd='forte',
                               db_database='sivas', instantclient_dir=instantclient_path, tns_admin=None, app=None,
                               init_oracle_client=True)

    if not conn:
        return

    if "SIVAS_EXCEL_EXPORT_DIR" in os.environ:
        excel_export_dir = os.environ["SIVAS_EXCEL_EXPORT_DIR"]
    else:
        excel_export_dir = os.path.join(os.path.join(os.environ['USERPROFILE']), 'Desktop')

    parser = argparse.ArgumentParser(description='Ein Tool, um Daten aus dem SIVAS-Teilestamm in eine Excel-Datei zu exportieren. Es können mit dem Parameter TEILENR 1...n Teilenummern angegeben werden. Das Verzeichnis in welches die CSV-Dateien exportiert werden muss als Umgebungsvariable SIVAS_EXCEL_EXPORT_DIR definiert werden. Falls nicht spezifiziert, wird auf den Desktop exportiert. Beispielaufruf: KSbExcelExportSivasTeilestamm.exe TEILENR=4711,0815,1234')
    parser.add_argument('-teilenr', dest='para_teilenr', help='Kommaseparierte liste von Artikelnummern')

    args = parser.parse_args()

    if not args.para_teilenr:
        print("Fehler beim Auslesen des Teilenummern Parameters.")
        return

    teilenummern = [s.strip() for s in args.para_teilenr.split(",")]
    for teilenr in teilenummern:
        o_fehler = conn.cursor_var(str)
        retval = conn.call('sivas.excel_ueb.konserve_ausfuehren', {"i_lfdnr": 500,
                                                                   "i_param1": teilenr,
                                                                   "o_fehler": o_fehler})

        if not retval:
            print(f"Fehler beim Export der Teilenummer {teilenr}: {o_fehler.getvalue()}")
            return

        writer = csv.writer(open(os.path.join(excel_export_dir, f"{teilenr}.csv"), "w", newline='', encoding='utf-8'), delimiter=";")

        sql = """select zeile 
                   from excel_ergebnis
                  order by lfdnr"""
        zeilen = conn.query(sql)
        for zeile in zeilen:
            writer.writerow(zeile["ZEILE"].split('\t'))

        count = count + 1
        print(f"{teilenr}.csv exportiert nach {excel_export_dir}")

    conn.connection().close()

    if count > 0:
        print(f"Alle Teile exportiert nach {excel_export_dir}")
        os.startfile(excel_export_dir)
    else:
        print("Nichts exportiert")

if __name__ == '__main__':
    main()