import json, re

SRC = "/tmp/claude-0/-home-danvics-docker-quiz/c1e0577a-e42c-4a3d-b1ea-3edd61103a4e/scratchpad/prose/batch-04.json"
DST = "/tmp/claude-0/-home-danvics-docker-quiz/c1e0577a-e42c-4a3d-b1ea-3edd61103a4e/scratchpad/prose/batch-04.done.json"

NUM_RE = re.compile(r"\d+(?:\.\d+)?")
MARK_RE = re.compile(r"\[\[(\d+)\|")

with open(SRC) as f:
    src = json.load(f)
with open(DST) as f:
    dst = json.load(f)

assert len(src) == len(dst), f"length mismatch {len(src)} vs {len(dst)}"

problems = []
for i, (s, d) in enumerate(zip(src, dst)):
    if s["section_id"] != d["section_id"]:
        problems.append((i, "section_id mismatch"))
        continue
    # keys check
    if set(s.keys()) != set(d.keys()):
        problems.append((i, f"key mismatch {set(s.keys())} vs {set(d.keys())}"))

    s_nums = NUM_RE.findall(s["content"])
    d_nums = NUM_RE.findall(d["content"])
    if s_nums != d_nums:
        problems.append((i, s.get("section_title"), "NUMBER MISMATCH", s_nums, d_nums))

    s_marks = MARK_RE.findall(s["content"])
    d_marks = MARK_RE.findall(d["content"])
    if s_marks != d_marks:
        problems.append((i, s.get("section_title"), "MARKER MISMATCH", s_marks, d_marks))

    ratio = len(d["content"]) / len(s["content"])
    if not (0.85 <= ratio <= 1.25):
        problems.append((i, s.get("section_title"), "LENGTH RATIO OUT OF BAND", ratio, len(s["content"]), len(d["content"])))

if problems:
    print(f"{len(problems)} PROBLEMS FOUND:")
    for p in problems:
        print(p)
else:
    print("ALL CHECKS PASSED for", len(src), "entries")
