#!/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:
    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(";")
        delta[int(data[delta_pn_sp])] = data[delta_such_sp]

for line in dh_export:
    data = line.rstrip().split(";")
    pn = data[sv_pn_spalte][1:-1]
    if len(pn):
       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)

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.
'''
