"""Extract exact time/action rows and screenshot-alignment metadata for case review."""
import csv, datetime, json
from pathlib import Path
R=Path(__file__).resolve().parents[1];A=R/'analysis'
extra={'odkcollect-Rep1':[529,530,1978,1979], 'odkcollect-Rep2':[1899,1900,1901,1902],
       'activitydiary-Rep1':[231,232,275,276], 'omninotes-Rep1':[1004,1005,1022],
       'omninotes-Rep2':[75,77,81], 'wikipedia-Rep2':[1872,1873]}
rows=[]
for p in sorted((R/'visuals/data').glob('*-Rep*.js')):
    text=p.read_text();r=json.loads(text[text.index('(')+1:text.rfind(')')]);rid=p.stem
    seqs=sorted(set(extra.get(rid,[])+[r['case']['focus_order']+1,r['case']['focus_order']+2]))
    for n in seqs:
        e=r['events'][n-1]
        rows.append(dict(run=rid,event_seq=n,native_step=e['step'],
          timestamp_utc=datetime.datetime.fromtimestamp(e['wall_time_ms']/1000,datetime.timezone.utc).isoformat(),
          wall_time_ms=e['wall_time_ms'],source_state=e['state'],target_state=e['target_state'],
          action_type=e['action_type'],model_action=e['model_action'],text=e['text'],resource_id=e['resource_id'],
          transition_identity=e['transition_id'],native_event_line=e['event_line'],
          source_activity=e['source_activity'],target_activity=e['target_activity'],
          new_state=e['first_observed_target_raw'],new_transition=e['first_model_transition_flow'],
          native_model_progress=e.get('latest_selection'),
          source_image=r['state_images'].get(e['state']),target_image=r['state_images'].get(e['target_state']),
          screenshot_caveat='Use recorded alignment; State representative is not exact-occurrence authentication'))
(A/'case-evidence.json').write_text(json.dumps(rows,ensure_ascii=False,indent=2)+'\n')
with (A/'case-evidence.csv').open('w',newline='') as f:
    w=csv.DictWriter(f,list(rows[0]));w.writeheader();w.writerows({k:json.dumps(v,ensure_ascii=False) if isinstance(v,(dict,list)) else v for k,v in r.items()} for r in rows)
print('CASE_ROWS',len(rows))
