# Nur lokaler Abgleich der Drucker-Vorlage, keine allgemeine JSON-Schema-Engine.
import json, sys
def parse(raw):
    return json.loads(raw, parse_constant=lambda value: (_ for _ in ()).throw(ValueError(value)))
def check(outer):
    if not isinstance(outer, dict) or outer.get("done") is not True:
        return "antwort_unvollstaendig"
    message = outer.get("message")
    if not isinstance(message, dict) or not isinstance(message.get("content"), str):
        return "inhalt_fehlt"
    try:
        data = parse(message["content"])
    except ValueError:
        return "inneres_json_ungueltig"
    if not isinstance(data, dict) or set(data) != {"betreff", "kategorie", "fruehester_termin"}:
        return "felder_unpassend"
    if not isinstance(data["betreff"], str) or not data["betreff"].strip():
        return "betreff_unpassend"
    if data["kategorie"] not in ("technik", "sonstiges"):
        return "kategorie_unerlaubt"
    if data["fruehester_termin"] is not None and not isinstance(data["fruehester_termin"], str):
        return "termin_typ_unpassend"
    # Eigener Sollvertrag: Druckerfall = technik, kein genanntes Datum = null.
    if data["kategorie"] != "technik" or data["fruehester_termin"] is not None:
        return "inhalt_weicht_ab"
    return "sollfelder_erfuellt"
if __name__ == "__main__":
    if len(sys.argv) != 2:
        raise SystemExit("Aufruf: python antwort-pruefen.py antwort-ollama.json")
    with open(sys.argv[1], encoding="utf-8-sig") as f:
        raw = f.read(1000001)
    if len(raw) > 1000000:
        raise SystemExit("Datei fuer diese kleine Uebung zu gross.")
    try:
        result = check(parse(raw))
    except ValueError:
        result = "aeusseres_json_ungueltig"
    print(result)
    print("Den Betreff weiterhin selbst am Originaltext pruefen; keine Leistungsbewertung.")
    raise SystemExit(0 if result == "sollfelder_erfuellt" else 1)
