#!/usr/bin/python3
'''
Created on 10.01.2024

@author: sparky2021
'''

import sys

if __name__ == '__main__':
    pass

numArgs = len(sys.argv)
if (numArgs != 4):
    raise RuntimeError("usage: sv-merger EXPORT DELTA FIELD") 


dh_export = open(sys.argv[1])
dh_delta  = open(sys.argv[2])
dh_import = open("import.csv", "w")

# Lese die Kopfzeile aus EXPORT
line = dh_export.readline().rstrip()
print(line, file=dh_import)
export_header = line.split(";")

sv_pn_spalte = -1
sv_such_spalte = -1

i = 0
for kopf in export_header:
    if kopf[0] == '"':
        kopf = kopf[1:-1]
    if kopf == 'Freifeldwert_1':
        sv_pn_spalte = i
    if kopf == sys.argv[3]:
        sv_such_spalte = i
    i += 1

if sv_pn_spalte == -1:
    raise RuntimeError("S-Verein-Export enthält keine Partnernummer")
if sv_such_spalte == -1:
    raise RuntimeError("S-Verein-Export enthält nicht das gewünschte Datenfeld "+sys.argv[3])

line = dh_delta.readline().rstrip()
delta_header = line.split(";")

delta_pn_sp = -1
delta_such_sp = -1

i = 0
for kopf in delta_header:
    if kopf == "Partnernummer":
        delta_pn_sp = i
    if kopf == sys.argv[3]:
        delta_such_sp = i
    i += 1

if delta_pn_sp == -1:
    raise RuntimeError("Delta-Datei enthält keine Partnernummer")
if delta_such_sp == -1:
    raise RuntimeError("Delta-Datei enthält nicht das gewünschte Datenfeld")

delta = {}
for line in dh_delta:
    if len(line.rstrip()):
        # not a empty line
        data = line.split(";")
        if len(data[delta_pn_sp]) == 0:
            print("Diese Zeile hat keine Migliedsnummer: ", line)
        else:
            delta[int(data[delta_pn_sp])] = data[delta_such_sp]

for line in dh_export:
    data = line.rstrip().split(";")
    pn = data[sv_pn_spalte]
    if len(pn) == 0:
        print("Diese Zeile (export) hat keine Migliedsnummer: ", line)
    else:
        if pn[0] == '"':
            pn = pn[1:-1]
        pn = int(pn)
        if pn in delta:
            if len(delta[pn]):
                if data[sv_such_spalte] != delta[pn]:
                    data[sv_such_spalte] = delta[pn]
                    print(";".join(data), file=dh_import)
        else:
            print(f"{pn} fehlt in delta-Datei")

dh_export.close()
dh_delta.close()
dh_import.close()

'''
Argumente:

EXPORT: Export-Datei aus S-Verein

DELTA: csv-Daten, die eingearbeitet werden sollen

FIELD: Feld, das eingearbeitet werden soll, wenn
 - Das Quellfeld nicht leer ist
 - Sich der Wert von der EXPORT-Datei unterscheidet

Die Synchronisation der Daten erfolgt anhand der Partnernummer.

Das Ergebnis wird stets in die Datei import.csv geschrieben.
'''
