import json, re

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

with open(SRC, encoding="utf-8") as f:
    src = json.load(f)
with open(DST, encoding="utf-8") as f:
    dst = json.load(f)

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

num_re = re.compile(r"\d+(?:\.\d+)?")
marker_re = re.compile(r"\[\[(\d+)\|")

problems = []
changed_count = 0

for i, (s, d) in enumerate(zip(src, dst)):
    if s["section_id"] != d["section_id"] or s["article_id"] != d["article_id"]:
        problems.append(f"entry {i}: id/order mismatch")
        continue
    # keys check
    if set(s.keys()) != set(d.keys()):
        problems.append(f"entry {i}: key mismatch {set(s.keys())} vs {set(d.keys())}")
    for k in s.keys():
        if k == "content":
            continue
        if s[k] != d[k]:
            problems.append(f"entry {i} ({s['section_id']}): non-content key '{k}' changed")

    sc, dc = s["content"], d["content"]
    if sc != dc:
        changed_count += 1
        # numeric tokens
        sn = num_re.findall(sc)
        dn = num_re.findall(dc)
        if sn != dn:
            problems.append(f"entry {i} ({s['section_id']}): numeric tokens differ\n  src={sn}\n  dst={dn}")
        # marker ids
        sm = marker_re.findall(sc)
        dm = marker_re.findall(dc)
        if sm != dm:
            problems.append(f"entry {i} ({s['section_id']}): marker ids differ src={sm} dst={dm}")
        # length ratio
        ratio = len(dc) / len(sc)
        if not (0.85 <= ratio <= 1.25):
            problems.append(f"entry {i} ({s['section_id']}): length ratio {ratio:.3f} out of band (src_len={len(sc)}, dst_len={len(dc)})")

print(f"Total entries: {len(dst)}")
print(f"Changed entries: {changed_count}")
if problems:
    print("PROBLEMS FOUND:")
    for p in problems:
        print(" -", p)
else:
    print("All checks passed.")
