"""Editorial fixture for the unmodified SLE v3 resolver. Python 3.10+.

No model, service, corpus, third-party package or network is required.
The fixture is synthetic. This is a lookup demonstration, not a transfer study.
"""
from __future__ import annotations

import argparse
from copy import deepcopy
import json
from pathlib import Path
import sys

ROOT = Path(__file__).resolve().parent
sys.path.insert(0, str(ROOT / "vendor" / "_SLE_PROTOTYPE_V3_2026-06-09"))
from sle_core_v3 import SemanticLayerEngineV3


def run() -> dict:
    seed = json.loads((ROOT / "fixture.json").read_text(encoding="utf-8"))
    engine = SemanticLayerEngineV3(seed=seed, graph_path=ROOT / "graph.json")
    cases = []
    for query in ("pruefhalt", "pruefhlt", "zzzzzz"):
        result = engine.resolve(query, lang="de")
        cases.append({
            "query": query, "found": result.found,
            "slug": result.term["slug"] if result.term else None,
            "match_type": result.match_type, "confidence": result.confidence,
        })

    original = engine.resolve("pruefhalt", lang="de")
    changed_seed = deepcopy(seed)
    changed_seed["terms"]["pruefhalt"]["def_de"] = (
        "Sofort weiterarbeiten; die ausstehende Prüfung ist keine Voraussetzung."
    )
    changed_engine = SemanticLayerEngineV3(
        seed=changed_seed, graph_path=ROOT / "graph.json"
    )
    changed = changed_engine.resolve("pruefhalt", lang="de")
    # Check only observations this example claims; no general quality score.
    assert original.found and changed.found
    assert original.definition != changed.definition
    assert original.confidence == changed.confidence == 1.0
    assert cases[1]["match_type"] == "fuzzy"
    assert cases[2]["found"] is False
    returned = engine.to_dict(original)
    absent = [field for field in ("version", "scope_note", "counterexample", "open_questions")
              if field not in returned and field not in (returned["term"] or {})]
    assert len(absent) == 4
    return {
        "fixture": "synthetic-editorial-v1", "term_count": len(engine.terms),
        "lookup_cases": cases,
        "definition_change": {
            "before": original.definition, "after": changed.definition,
            "confidence_before": original.confidence,
            "confidence_after": changed.confidence,
            "same_lookup_confidence": original.confidence == changed.confidence,
        },
        "fixture_fields_absent_from_resolve_response": absent,
        "scope": "Lookup behavior only; no semantic quality or model transfer was measured.",
    }


if __name__ == "__main__":
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument("--check", action="store_true", help="Compare with expected.json")
    args = parser.parse_args()
    observed = run()
    if args.check:
        expected = json.loads((ROOT / "expected.json").read_text(encoding="utf-8"))
        if observed != expected:
            print(json.dumps(observed, ensure_ascii=False, indent=2))
            raise SystemExit("FAIL: output differs from expected.json")
        print("PASS: exact, fuzzy, unknown, changed definition, omitted fields")
    else:
        print(json.dumps(observed, ensure_ascii=False, indent=2))
