import json, os
BASE = os.path.dirname(os.path.abspath(__file__))
prod = {r['id']: r for r in json.load(open(os.path.join(BASE,'_needsrev_half.json'),encoding='utf-8'))}
dev  = {r['id']: r for r in json.load(open(os.path.join(BASE,'_dev_versions.json'),encoding='utf-8'))}
recover = json.load(open(os.path.join(BASE,'_recover_updates.json'),encoding='utf-8'))  # [{id, question(dev)}]

def norm(v): return '' if v is None else str(v).strip()

out=[]; advance=0; hold=0
for u in recover:
    id=u['id']; p=prod[id]; d=dev[id]
    ans_ok = all(norm(p.get(f'answer{i}'))==norm(d.get(f'dev_a{i}')) for i in range(4)) and norm(p.get('correct_answer'))==norm(d.get('dev_ca'))
    out.append({'id':id,'question':u['question'],'advance':bool(ans_ok)})
    if ans_ok: advance+=1
    else: hold+=1
json.dump(out, open(os.path.join(BASE,'_recover_apply.json'),'w',encoding='utf-8'), ensure_ascii=False)
print(f"to_apply={len(out)}  answers_match(advance->unreviewed)={advance}  answer_mismatch(hold needs_revision)={hold}")
print("--- mismatches (prod ans vs dev ans) ---")
for u in out:
    if not u['advance']:
        id=u['id']; p=prod[id]; d=dev[id]
        print(f"#{id} prod[a0={p.get('answer0')} ca={p.get('correct_answer')}] dev[a0={d.get('dev_a0')} ca={d.get('dev_ca')}]")
