import pandas as pd
import os
import re



# --- KONFIGURATION alte Excel --> neue Excel ---
SOURCE_FILE = 'TBL_Event_Kopfdaten.xlsx'
TARGET_FILE = 'maintenance_import.xlsx'


def clean_text(text):
    """Entfernt Excel-Artefakte wie _x000D_."""
    if not text or pd.isna(text): return ""
    text = str(text)
    # Ersetze _x000D_ durch Zeilenumbruch (für Beschreibung)
    text = text.replace('_x000D_', '\n')
    # Entferne evtl. doppelte Umbrüche oder Whitespace
    return text.strip()


def map_interval_unit(unit_str):
    u = str(unit_str).lower().strip()
    if 'jahr' in u: return 'Jahre'
    if 'monat' in u: return 'Monate'
    if 'woch' in u: return 'Wochen'
    if 'tag' in u: return 'Tage'
    if u == 'm': return 'Monate'
    if u == 'y': return 'Jahre'
    if u == 'w': return 'Wochen'
    return 'Monate'


def parse_checklist(text):
    """
    Zerlegt Text am Bindestrich, bereinigt Artefakte.
    """
    if not text or pd.isna(text): return ""

    # Zuerst Artefakte weg
    clean_t = text.replace('_x000D_', ' ')

    parts = clean_t.split('-')
    clean_parts = [p.strip() for p in parts if p.strip()]
    return ";".join(clean_parts)


def migrate():
    if not os.path.exists(SOURCE_FILE):
        print(f"FEHLER: '{SOURCE_FILE}' fehlt.")
        return

    print("Lade Daten...")
    try:
        df = pd.read_excel(SOURCE_FILE, dtype=str)
    except:
        df = pd.read_csv(SOURCE_FILE, sep=';', dtype=str)

    print(f"Zeilen gesamt: {len(df)}")

    # 1. Konvertieren & Sortieren (OHNE vorheriges Filtern)
    df['Revnr_des_Events'] = pd.to_numeric(df['Revnr_des_Events'], errors='coerce').fillna(0)
    # Sortieren: Neueste Revision nach oben
    df = df.sort_values(by=['LfdNr', 'Revnr_des_Events'], ascending=[True, False])

    # 2. Deduplizieren (Die allerneueste Zeile pro Plan gewinnen lassen)
    df_latest = df.drop_duplicates(subset=['LfdNr'], keep='first')
    print(f"Eindeutige LfdNr gefunden: {len(df_latest)}")

    # 3. "Entfernt" Filter (Das ist der wichtigste Schritt!)
    # Wir werfen alles raus, was als letzte Aktion "entfernt" hat
    df_active = df_latest[~df_latest['DBentry_Type'].astype(str).str.lower().str.contains('entfernt', na=False)]
    print(f"Nach Entfernen von gelöschten Plänen: {len(df_active)}")

    # 4. Jetzt erst Daten-Validierung (Intervall muss da sein)
    # Nur Pläne, die aktiv sind UND valide Daten haben, kommen rein
    df_clean = df_active[df_active['Intervall_Type'].notna() & (df_active['Intervall_Type'] != '')]
    print(f"Valide Pläne für Import: {len(df_clean)}")

    # 5. Mapping (Rest bleibt gleich)
    export_data = []

    for _, row in df_clean.iterrows():
        raw_instr = row.get('Instruktionen', '')
        instruktion = clean_text(raw_instr)
        comm = clean_text(row.get('Kommentare', ''))
        firma = clean_text(row.get('Firma', ''))

        full_desc = instruktion
        if comm and comm.lower() != 'nan':
            full_desc += f"\n\nKommentar: {comm}"

        # Checkliste (nutzt den rohen Text für besseres Splitting)
        checklist_str = parse_checklist(raw_instr)

        start_date = row.get('DBentry_Date', '')
        try:
            start_date = pd.to_datetime(start_date).strftime('%Y-%m-%d')
        except:
            pass

        export_row = {
            'ID': f"OLD-{row.get('LfdNr', '')}",
            'Aufgabe': row.get('Event', ''),
            'Beschreibung': full_desc,
            'Bereich': row.get('Verantwortlichkeitsebene', ''),
            'Prüfstand': 'Facility',
            'Index': row.get('Stand', ''),
            'Intervall Wert': row.get('Intervall_Days', ''),
            'Intervall Einheit': map_interval_unit(row.get('Intervall_Type', '')),
            'Startdatum': start_date,
            'Dauer': '',
            'Aktiv': '',
            'Review': '',
            'Checkliste': checklist_str,
            'Assets': '',
            'Firma': firma  # NEU: Eigene Spalte für den Import
        }
        export_data.append(export_row)

    # 4. Schreiben
    df_export = pd.DataFrame(export_data)
    cols = ['ID', 'Aufgabe', 'Beschreibung', 'Bereich', 'Prüfstand', 'Index',
            'Intervall Wert', 'Intervall Einheit', 'Startdatum', 'Dauer',
            'Aktiv', 'Review', 'Checkliste', 'Assets', 'Firma']  # Firma dazu

    # Sicherstellen, dass nur existierende Spalten gewählt werden, aber 'Firma' ist jetzt da
    df_export = df_export[[c for c in cols if c in df_export.columns]]

    df_export.to_excel(TARGET_FILE, index=False)
    print(f"\nErfolg! {len(df_export)} Zeilen erstellt.")


if __name__ == '__main__':
    migrate()