import json
from collections import Counter
inp = '/var/www/html/peta/storage/app/propertylab-catalogue-match/review/v_rest_03_in.jsonl'
out = '/var/www/html/peta/storage/app/propertylab-catalogue-match/review/v_rest_03_out.jsonl'
cases = [json.loads(l) for l in open(inp) if l.strip()]
rows = [json.loads(l) for l in open(out) if l.strip()]
errs = []
if len(rows) != len(cases): errs.append(f'count {len(rows)} vs {len(cases)}')
keys = {'case', 'verdict', 'cand', 'confidence_pct', 'relation', 'reason', 'web'}
for i, (c, r) in enumerate(zip(cases, rows)):
    if set(r) != keys: errs.append(f'line {i} keys {sorted(r)}')
    if r['case'] != c['case']: errs.append(f'line {i} order {r["case"]} != {c["case"]}')
    ks = {k['k'] for k in c['catalogue_candidates']}
    if r['verdict'] not in ('SAME', 'PART_OF', 'DIFFERENT', 'UNSURE'): errs.append(f'{r["case"]} verdict')
    if r['cand'] is not None and r['cand'] not in ks: errs.append(f'{r["case"]} cand out of range')
    if r['verdict'] in ('SAME', 'PART_OF') and r['cand'] is None: errs.append(f'{r["case"]} missing cand')
    if r['verdict'] == 'DIFFERENT' and r['cand'] is not None: errs.append(f'{r["case"]} DIFFERENT has cand')
    if (r['verdict'] == 'PART_OF') != (r['relation'] in ('R_in_C', 'C_in_R')): errs.append(f'{r["case"]} relation')
    if r['verdict'] != 'PART_OF' and r['relation'] is not None: errs.append(f'{r["case"]} stray relation')
    if not isinstance(r['confidence_pct'], int) or not 0 <= r['confidence_pct'] <= 100: errs.append(f'{r["case"]} conf')
    if len(r['reason'].split()) > 20: errs.append(f'{r["case"]} reason too long')
    if not isinstance(r['web'], bool): errs.append(f'{r["case"]} web not bool')
ids = [r['case'] for r in rows]
if len(set(ids)) != len(ids): errs.append('duplicate case ids in output')
print('ERRORS:', errs if errs else 'none')
print('lines', len(rows), '| unique', len(set(ids)))
print('verdicts', dict(Counter(r['verdict'] for r in rows)))
print('conf>=90', sum(r['confidence_pct'] >= 90 for r in rows), dict(Counter(r['verdict'] for r in rows if r['confidence_pct'] >= 90)))
print('web true', sum(r['web'] for r in rows))
print('max reason words', max(len(r['reason'].split()) for r in rows))
