import pandas as pd
from pathlib import Path

# =========================================================
# DATEIPFADE ANPASSEN
# =========================================================
artikel_datei = r"/mnt/data/ct_artikel_parent_all.csv"
fedas_datei = r"/mnt/data/FedasMaster.csv"

ausgabe_datei = r"/mnt/data/ct_artikel_parent_all_mit_fedas_spalten.csv"
fehler_datei = r"/mnt/data/fedas_ohne_treffer.csv"

# =========================================================
# EINLESEN
# Alles als Text laden, damit FEDAS-Werte sauber bleiben
# =========================================================
print("Lese Artikeldatei...")
df_artikel = pd.read_csv(
    artikel_datei,
    sep=";",
    dtype=str,
    encoding="utf-8",
    keep_default_na=False
)

print("Lese FedasMaster-Datei...")
df_fedas = pd.read_csv(
    fedas_datei,
    sep=";",
    dtype=str,
    encoding="utf-8",
    keep_default_na=False
)

# =========================================================
# SPALTENNAMEN PRÜFEN
# =========================================================
artikel_key = "Fedas_kummuliert"
fedas_key = "(FEDAS)"

if artikel_key not in df_artikel.columns:
    raise ValueError(f"Spalte '{artikel_key}' nicht in Artikeldatei gefunden.")

if fedas_key not in df_fedas.columns:
    raise ValueError(f"Spalte '{fedas_key}' nicht in FedasMaster-Datei gefunden.")

# =========================================================
# WERTE BEREINIGEN
# =========================================================
df_artikel[artikel_key] = df_artikel[artikel_key].astype(str).str.strip()
df_fedas[fedas_key] = df_fedas[fedas_key].astype(str).str.strip()

# Leere Strings sauber behandeln
df_artikel[artikel_key] = df_artikel[artikel_key].replace({"": pd.NA})
df_fedas[fedas_key] = df_fedas[fedas_key].replace({"": pd.NA})

# =========================================================
# DUBLETTEN IN FEDASMASTER ENTFERNEN
# Falls ein FEDAS mehrfach vorkommt, wird nur der erste genutzt
# =========================================================
vorher = len(df_fedas)
df_fedas_eindeutig = df_fedas.drop_duplicates(subset=[fedas_key], keep="first").copy()
nachher = len(df_fedas_eindeutig)

print(f"FedasMaster: {vorher} Zeilen, nach Dublettenbereinigung: {nachher} Zeilen")

# =========================================================
# MERGE / LOOKUP
# Alle Spalten aus df_fedas werden angehängt
# =========================================================
print("Führe Merge durch...")
df_merged = df_artikel.merge(
    df_fedas_eindeutig,
    how="left",
    left_on=artikel_key,
    right_on=fedas_key,
    suffixes=("", "_fedas")
)

# =========================================================
# TREFFER / NICHTTREFFER ERMITTELN
# =========================================================
kein_treffer = df_merged[fedas_key].isna()

df_ohne_treffer = (
    df_merged.loc[kein_treffer, [artikel_key]]
    .rename(columns={artikel_key: "Fedas_kummuliert"})
    .drop_duplicates()
    .sort_values("Fedas_kummuliert")
)

# Optional: nur nichtleere FEDAS-Werte in Fehlerdatei
df_ohne_treffer = df_ohne_treffer[
    df_ohne_treffer["Fedas_kummuliert"].notna() &
    (df_ohne_treffer["Fedas_kummuliert"].astype(str).str.strip() != "")
]

# =========================================================
# AUSGABE SPEICHERN
# =========================================================
print("Speichere Ergebnisdatei...")
df_merged.to_csv(
    ausgabe_datei,
    sep=";",
    index=False,
    encoding="utf-8"
)

print("Speichere Fehlerdatei...")
df_ohne_treffer.to_csv(
    fehler_datei,
    sep=";",
    index=False,
    encoding="utf-8"
)

# =========================================================
# STATISTIK
# =========================================================
gesamt = len(df_merged)
ohne_treffer_zeilen = int(kein_treffer.sum())
mit_treffer_zeilen = gesamt - ohne_treffer_zeilen
ohne_treffer_codes = len(df_ohne_treffer)

print("\nFERTIG")
print(f"Gesamtzeilen:            {gesamt}")
print(f"Zeilen mit Treffer:      {mit_treffer_zeilen}")
print(f"Zeilen ohne Treffer:     {ohne_treffer_zeilen}")
print(f"Unterschiedliche FEDAS ohne Treffer: {ohne_treffer_codes}")
print(f"\nErgebnisdatei: {ausgabe_datei}")
print(f"Fehlerdatei:   {fehler_datei}")

