import json
import time
import os
import sys

# Ensure we can import from lead-engine
sys.path.append(os.path.join(os.path.dirname(__file__), 'lead-engine'))
try:
    from trading_twins_ingest import process_leads
except ImportError:
    print("Warning: Could not import trading_twins_ingest from lead-engine. Email ingestion disabled.")
    process_leads = None

from company_explorer_connector import handle_company_workflow

def run_trading_twins_process(target_company_name: str):
    """
    Startet den Trading Twins Prozess für ein Zielunternehmen.
    Ruft den Company Explorer Workflow auf, um das Unternehmen zu finden, 
    zu erstellen oder anzureichern.
    """
    print(f"\n{'='*50}")
    print(f"Starte Trading Twins Analyse für: {target_company_name}")
    print(f"{'='*50}\n")

    # Aufruf des Company Explorer Workflows
    # Diese Funktion prüft, ob die Firma existiert. 
    # Wenn nicht, erstellt sie die Firma und startet die Anreicherung.
    # Sie gibt am Ende die Daten aus dem Company Explorer zurück.
    company_data_result = handle_company_workflow(target_company_name)

    # Verarbeitung der Rückgabe (für den POC genügt eine Ausgabe)
    print("\n--- Ergebnis vom Company Explorer Connector (für Trading Twins) ---")
    
    status = company_data_result.get("status")
    data = company_data_result.get("data")

    if status == "error":
        print(f"Ein Fehler ist aufgetreten: {company_data_result.get('message')}")
    elif status == "found":
        print(f"Unternehmen gefunden. ID: {data.get('id')}, Name: {data.get('name')}")
        print(json.dumps(data, indent=2, ensure_ascii=False))
    elif status == "created_and_enriched":
        print(f"Unternehmen erstellt und Enrichment angestoßen. ID: {data.get('id')}, Name: {data.get('name')}")
        print("Hinweis: Enrichment-Prozesse laufen im Hintergrund und können einige Zeit dauern, bis alle Daten verfügbar sind.")
        print(json.dumps(data, indent=2, ensure_ascii=False))
    elif status == "created_discovery_timeout":
        print(f"Unternehmen erstellt, aber Discovery konnte keine Website finden (ID: {data.get('id')}, Name: {data.get('name')}).")
        print("Der Analyse-Prozess wurde daher nicht gestartet.")
        print(json.dumps(data, indent=2, ensure_ascii=False))
    else:
        print("Ein unerwarteter Status ist aufgetreten.")
        print(json.dumps(company_data_result, indent=2, ensure_ascii=False))

    print(f"\n{'='*50}")
    print(f"Trading Twins Analyse für {target_company_name} abgeschlossen.")
    print(f"{'='*50}\n")

def run_email_ingest():
    """Starts the automated email ingestion process for Tradingtwins leads."""
    if process_leads:
        print("\nStarting automated email ingestion via Microsoft Graph...")
        process_leads()
        print("Email ingestion completed.")
    else:
        print("Error: Email ingestion module not available.")

if __name__ == "__main__":
    # Simulieren der Umgebungsvariablen für diesen Testlauf, falls nicht gesetzt
    if "COMPANY_EXPLORER_API_USER" not in os.environ:
        os.environ["COMPANY_EXPLORER_API_USER"] = "admin"
    if "COMPANY_EXPLORER_API_PASSWORD" not in os.environ:
        os.environ["COMPANY_EXPLORER_API_PASSWORD"] = "gemini"

    print("Trading Twins Tool - Main Menu")
    print("1. Process specific company name")
    print("2. Ingest leads from Email (info@robo-planet.de)")
    print("3. Run demo sequence (Robo-Planet, Erding, etc.)")
    
    choice = input("\nSelect option (1-3): ").strip()
    
    if choice == "1":
        name = input("Enter company name: ").strip()
        if name:
            run_trading_twins_process(name)
    elif choice == "2":
        run_email_ingest()
    elif choice == "3":
        # Testfall 1: Ein Unternehmen, das wahrscheinlich bereits existiert
        run_trading_twins_process("Robo-Planet GmbH")
        time.sleep(2)
        # Testfall 1b: Ein bekanntes, real existierendes Unternehmen
        run_trading_twins_process("Klinikum Landkreis Erding")
        time.sleep(2)
        # Testfall 2: Ein neues, eindeutiges Unternehmen
        new_unique_company_name = f"Trading Twins New Target {int(time.time())}"
        run_trading_twins_process(new_unique_company_name)
    else:
        print("Invalid choice.")
