"""
Minimale Version des Finanz-Compliance-Graphen
"""

from typing import TypedDict, Optional, Dict, Any
from langgraph.graph import StateGraph, END

# Minimaler Zustandstyp
class State(TypedDict):
    document: str
    financial_data: Optional[Dict]
    compliance_status: Optional[str]
    recommendation: Optional[str]

# Vereinfachte Funktionen
def analyze_financial_statement(state):
    # Analyse der Finanzdaten
    analyzed_data = {"risk_level": "high" if "high" in state["document"] else "low"}
    return {"financial_data": analyzed_data}

def check_compliance(state):
    # Compliance-Prüfung
    status = "critical" if state["financial_data"]["risk_level"] == "high" else "compliant"
    return {"compliance_status": status}

def route_to_expert(state):
    # Routing-Logik
    if state["compliance_status"] == "critical":
        return "escalate_to_senior"
    elif state["compliance_status"] == "review_needed":
        return "assign_to_analyst"
    else:
        return "auto_approve"

def escalate_function(state):
    return {"recommendation": "Eskalation an Senior Manager"}

def analyst_function(state):
    return {"recommendation": "Zuweisung an Analyst"}

def approve_function(state):
    return {"recommendation": "Automatische Genehmigung"}

# Graph erstellen
graph = StateGraph(State)
graph.add_node("analyze", analyze_financial_statement)
graph.add_node("compliance", check_compliance)
graph.add_node("escalate_to_senior", escalate_function)
graph.add_node("assign_to_analyst", analyst_function)
graph.add_node("auto_approve", approve_function)

# Kanten hinzufügen
graph.add_edge("analyze", "compliance")
graph.add_conditional_edges("compliance", route_to_expert)
graph.add_edge("escalate_to_senior", END)
graph.add_edge("assign_to_analyst", END)
graph.add_edge("auto_approve", END)

# Startknoten definieren
graph.set_entry_point("analyze")

# Graph kompilieren
app = graph.compile()

# Test
test_input = {"document": "high_risk_report.pdf"}
result = app.invoke(test_input)
print("Ergebnis:", result)

# Visualisierung
try:
    from IPython.display import Image
    from langchain_core.runnables.graph import MermaidDrawMethod
    
    # PNG generieren
    png_data = app.get_graph().draw_mermaid_png(
        draw_method=MermaidDrawMethod.API
    )
    
    # PNG speichern
    with open("minimal_graph.png", "wb") as f:
        f.write(png_data)
    print("Graph gespeichert als: minimal_graph.png")
except Exception as e:
    print(f"Visualisierung nicht möglich: {e}")
