#!/usr/bin/env python3
import subprocess,sys,time,json,pathlib,shutil
from PIL import Image,ImageChops
ROOT=pathlib.Path('/tmp/lead-27587-r1/evidence-capture-1')
label,session,platform,sequence=sys.argv[1:]
out=ROOT/(time.strftime('%Y%m%d-%H%M%S')+'-'+label);out.mkdir()
start=time.monotonic();events=[]
def cmd(args,stdin=None):
 t=round(time.monotonic()-start,3)
 p=subprocess.run(['agent-device',*args,'--session',session],capture_output=True,text=True,input=stdin)
 events.append({'at':t,'args':args,'exit':p.returncode,'stdout':p.stdout,'stderr':p.stderr})
 (out/'steps.json').write_text(json.dumps(events,indent=2))
 if p.returncode: raise RuntimeError(p.stdout+p.stderr)
 return p.stdout
def fill(q):
 if platform=='ios':
  p=subprocess.run(['agent-device','snapshot','-i','--session',session],capture_output=True,text=True)
  if 'Clear text' in p.stdout: cmd(['press','label="Clear text"','--settle'])
  cmd(['press','role="search"','--settle'])
  if q: cmd(['type',q,'--delay-ms','80'])
 else: cmd(['fill','editable=true',q,'--settle'])
 time.sleep(0.8)
def still(name):
 if platform=='ios': cmd(['keyboard','enter'])
 else: cmd(['keyboard','dismiss'])
 time.sleep(0.8)
 for attempt in range(10):
  a=out/f'{name}-settle-{attempt}-a.png';b=out/f'{name}-settle-{attempt}-b.png'
  opts=['--pixel-density','3'] if platform=='ios' else ['--normalize-status-bar']
  cmd(['screenshot',str(a),*opts]);time.sleep(0.5);cmd(['screenshot',str(b),*opts])
  if ImageChops.difference(Image.open(a).convert('RGB'),Image.open(b).convert('RGB')).getbbox() is None:
   shutil.copy2(b,out/f'{name}.png');return
 raise RuntimeError('No pixel-identical frame '+name)
cmd(['record','start',str(out/f'{label}.mp4'),'--scope','device','--fps','15','--hide-touches'])
try:
 if sequence=='search':
  fill('');
  if platform=='ios':
   for i in range(3): cmd(['press','label="space"','--settle'])
  fill('');fill('Opus 4.8');still('F02-opus-key');fill('Claude Opus 4.8');fill('  cLaUdE oPuS 4.8  ');fill('claude-opus-4-8');fill('');fill('Claude');still('F03-broad-key');cmd(['scroll','down','450','--settle']);cmd(['scroll','bottom','--settle']);fill('')
 elif sequence=='exact':
  fill('Opus 4.8');still('F02-opus-key');fill('Claude Opus 4.8');fill('  cLaUdE oPuS 4.8  ');fill('claude-opus-4-8');fill('');fill('Claude');still('F03-broad-key');cmd(['scroll','bottom','--settle']);fill('')
finally:
 cmd(['record','stop'])
print(out)
