import pandas as pd
import sys
from pathlib import Path

def convert_excel_to_sql(excel_file_path, output_file_path=None):
    """
    Konvertiert eine Excel-Datei mit Node-Predecessor-Daten in SQL-Statements.
    
    Args:
        excel_file_path (str): Pfad zur Excel-Datei
        output_file_path (str, optional): Pfad zur Ausgabe-SQL-Datei. 
                                         Wenn None, wird automatisch generiert.
    """
    try:
        # Excel-Datei laden
        df = pd.read_excel(excel_file_path)
        
        # Spalten-Namen bereinigen (falls nötig)
        df.columns = df.columns.str.strip()
        
        # Erwartete Spalten prüfen
        expected_columns = ['node', 'Pre-node 1', 'Pre-node 2', 'Pre-node 3']
        if not all(col in df.columns for col in expected_columns):
            print(f"Fehler: Erwartete Spalten nicht gefunden. Gefundene Spalten: {list(df.columns)}")
            return
        
        # Ausgabe-Datei festlegen
        if output_file_path is None:
            output_file_path = Path(excel_file_path).stem + '_converted.sql'
        
        # SQL-Statements generieren
        sql_statements = []
        
        # Header-Kommentar hinzufügen
        sql_statements.append("-- Automatisch generierte SQL-Statements für Node Predecessor Chains")
        sql_statements.append("-- Generiert aus: " + str(excel_file_path))
        sql_statements.append("")
        
        chain_counter = 1
        
        for index, row in df.iterrows():
            node_id = row['node']
            
            # Leere Zeilen überspringen
            if pd.isna(node_id) or str(node_id).strip() == '':
                continue
            
            # Kommentar für die Chain
            sql_statements.append(f"-- Predecessor Chain {chain_counter}: {node_id}")
            
            # Node Predecessor Chain erstellen
            sql_statements.append("INSERT INTO node_predecessor_chain (")
            sql_statements.append("    node_id")
            sql_statements.append(") VALUES (")
            sql_statements.append(f"             (SELECT id FROM node WHERE external_mapping_id = '{node_id}')")
            sql_statements.append("         );")
            sql_statements.append("")
            
            # Variable für Chain-ID setzen
            sql_statements.append(f"SET @chain_id_{chain_counter} = LAST_INSERT_ID();")
            sql_statements.append("")
            
            # Predecessor Entries erstellen (nur wenn nicht leer)
            sequence_number = 1
            for pre_node_col in ['Pre-node 1', 'Pre-node 2', 'Pre-node 3']:
                pre_node_value = row[pre_node_col]
                
                # Nur verarbeiten wenn Wert vorhanden ist
                if not pd.isna(pre_node_value) and str(pre_node_value).strip() != '':
                    sql_statements.append("INSERT INTO node_predecessor_entry (")
                    sql_statements.append("    node_id,")
                    sql_statements.append("    node_predecessor_chain_id,")
                    sql_statements.append("    sequence_number")
                    sql_statements.append(") VALUES (")
                    sql_statements.append(f"             (SELECT id FROM node WHERE external_mapping_id = '{pre_node_value}'),")
                    sql_statements.append(f"             @chain_id_{chain_counter},")
                    sql_statements.append(f"             {sequence_number}")
                    sql_statements.append("         );")
                    sql_statements.append("")
                    
                    sequence_number += 1
            
            chain_counter += 1
        
        # SQL-Datei schreiben
        with open(output_file_path, 'w', encoding='utf-8') as f:
            f.write('\n'.join(sql_statements))
        
        print(f"Erfolgreich konvertiert! SQL-Datei erstellt: {output_file_path}")
        print(f"Verarbeitete Zeilen: {len(df)}")
        print(f"Generierte Chains: {chain_counter - 1}")
        
    except FileNotFoundError:
        print(f"Fehler: Datei '{excel_file_path}' nicht gefunden.")
    except Exception as e:
        print(f"Fehler beim Verarbeiten der Datei: {str(e)}")

def main():
    """
    Hauptfunktion für die Kommandozeilen-Nutzung.
    """
    if len(sys.argv) < 2:
        print("Verwendung: python excel_to_sql.py <excel_datei> [ausgabe_datei]")
        print("Beispiel: python excel_to_sql.py pre_nodes.xlsx output.sql")
        return
    
    excel_file = sys.argv[1]
    output_file = sys.argv[2] if len(sys.argv) > 2 else None
    
    convert_excel_to_sql(excel_file, output_file)

if __name__ == "__main__":
    main()

# Beispiel für die direkte Verwendung im Script:
# convert_excel_to_sql('pre_nodes.xlsx', 'predecessor_chains.sql')