import pandas as pd
from functools import reduce

# source_csv = 'data\\Kontenrahmen_Import.csv'
# target_csv = 'data\\Kontenrahmen.csv'
# result_csv = 'data\\Kontenrahmen_Ergebnis.csv'
# source_csv = 'P:\\SKR51_GCStruct\\Kontenrahmen_Vorlage.csv'
# target_csv = 'P:\\SKR51_GCStruct\\GCStruct_Portal\\Kontenrahmen\\Kontenrahmen.csv'
# result_csv = 'P:\\SKR51_GCStruct\\GCStruct_Portal\\Kontenrahmen\\Kontenrahmen_neu.csv'
base_dir = 'V:\\Kunden\\Luchtenberg\\1 Umstellung SKR51\\GCStruct_Modell\\Kontenrahmen\\'
source_csv = base_dir + 'Kontenrahmen_Vorlage.csv'
target_csv = base_dir + 'Kontenrahmen.csv'
result_csv = base_dir + 'Kontenrahmen_neu.csv'

debug = False
cols_pkey = ['Konto_Nr']


def update(d, other):
    d.update(dict(dict(other)))
    return d


def get_dict(cols, type):
    return dict(dict(zip(cols, [type] * len(cols))))

# cols_dict = reduce(update, (get_dict(cols_pkey, np.str), get_dict(cols_str, np.str), get_dict(cols_float, np.float)), {})


df_source = pd.read_csv(source_csv, decimal=',', sep=';', encoding='latin-1', converters={i: str for i in range(0, 200)})
df_source['pkey'] = reduce(lambda x, y: x + '_' + df_source[y], cols_pkey, '')
df_source = df_source.set_index('pkey')

df_target = pd.read_csv(target_csv, decimal=',', sep=';', encoding='latin-1', converters={i: str for i in range(0, 200)})
target_columns = df_target.columns
df_target['pkey'] = reduce(lambda x, y: x + '_' + df_target[y], cols_pkey, '')
df_target = df_target.set_index('pkey')

df_join = df_source.join(df_target, how='left', rsuffix='_other')[target_columns]
df_remain = df_target.join(df_source, how='left', rsuffix='_other')
df_remain = df_remain[pd.isna(df_remain[cols_pkey[0] + '_other'])][target_columns]
# df_result = df_join[(df_join['Gesamt'] != 0) & (df_join['Serviceberater'] != "")]

# veraltete Konten nicht löschen
df_join = df_join.append(df_remain).sort_index()

df_join.to_csv(result_csv, decimal=',', sep=';', encoding='latin-1', index=None)