from typing import TypedDict

class Auftrag(TypedDict):
    auftrag: str
    text: str
    status: str
    ergebnis: str

def bereinigen(state: Auftrag) -> dict:
    if not isinstance(state["auftrag"], str):
        raise ValueError("auftrag muss Text sein")
    return {"text": " ".join(state["auftrag"].split())}

def pruefen(state: Auftrag) -> dict:
    return {"status": "bereit" if state["text"] else "fehlt"}

def fertig(state: Auftrag) -> dict:
    return {"ergebnis": "Zur fachlichen Prüfung: " + state["text"]}

def bauen():
    from langgraph.graph import StateGraph, START, END
    graph = StateGraph(Auftrag)
    graph.add_node("bereinigen", bereinigen)
    graph.add_node("pruefen", pruefen)
    graph.add_node("fertig", fertig)
    graph.add_edge(START, "bereinigen")
    graph.add_edge("bereinigen", "pruefen")
    def route(state):
        return "fertig" if state["status"] == "bereit" else END
    graph.add_conditional_edges("pruefen", route, ["fertig", END])
    graph.add_edge("fertig", END)
    return graph.compile()

if __name__ == "__main__":
    app = bauen()
    start = {"auftrag": "  Prüfe   den Entwurf.  ", "text": "",
             "status": "", "ergebnis": "Bitte Auftrag ergänzen."}
    print(app.invoke(start))
