import json, re

SRC = "/tmp/claude-0/-home-danvics-docker-quiz/c1e0577a-e42c-4a3d-b1ea-3edd61103a4e/scratchpad/prose/batch-05.json"
DST = "/tmp/claude-0/-home-danvics-docker-quiz/c1e0577a-e42c-4a3d-b1ea-3edd61103a4e/scratchpad/prose/batch-05.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)

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

problems = []
for i, (s, d) in enumerate(zip(src, dst)):
    for k in s:
        if k == "content":
            continue
        if s[k] != d.get(k):
            problems.append((i, "key-mismatch", k))

    s_nums = NUM_RE.findall(s["content"])
    d_nums = NUM_RE.findall(d["content"])
    if s_nums != d_nums:
        problems.append((i, "numbers", 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, "markers", s_marks, d_marks))

    ratio = len(d["content"]) / len(s["content"])
    if not (0.85 <= ratio <= 1.25):
        problems.append((i, "length-ratio", round(ratio, 3), len(s["content"]), len(d["content"])))

if problems:
    print(f"{len(problems)} PROBLEMS FOUND")
    for p in problems:
        print(p)
else:
    print(f"ALL {len(src)} ENTRIES OK")

# print ratio summary regardless
print("\nRatios:")
for i, (s, d) in enumerate(zip(src, dst)):
    ratio = len(d["content"]) / len(s["content"])
    print(i, s["article_id"], s["section_title"], round(ratio, 3))
