#!/usr/bin/env python3
import subprocess,json,time,datetime,pathlib,sys
ROOT=pathlib.Path('/tmp/lead-33223-r1/evidence-capture-1')
CWD='/home/user/wt/pr-33223'
row,side,session=sys.argv[1:4]
out=ROOT/(datetime.datetime.now(datetime.timezone.utc).strftime('%Y%m%dT%H%M%S')+'-'+row+'-'+side)
out.mkdir()
log=[];start=time.monotonic()
def cmd(*args):
 t=round(time.monotonic()-start,3)
 r=subprocess.run(['agent-device',*map(str,args),'--session',session],cwd=CWD,capture_output=True,text=True)
 log.append({'seconds':t,'command':['agent-device',*map(str,args),'--session',session],'returncode':r.returncode,'stdout':r.stdout,'stderr':r.stderr})
 (out/'driver-log.private.json').write_text(json.dumps(log,indent=2))
 if r.returncode:raise RuntimeError(r.stdout+r.stderr)
 print(r.stdout,flush=True)
 return r

def settled(name):
 for n in range(8):
  a=out/f'{name}-settle-{n}-a.png';b=out/f'{name}-settle-{n}-b.png'
  cmd('screenshot',a);time.sleep(.5);cmd('screenshot',b)
  r=subprocess.run(['compare','-metric','AE','-fuzz','0',str(a),str(b),'null:'],capture_output=True,text=True)
  log.append({'settledPair':name,'attempt':n,'AE':r.stderr})
  if r.returncode==0:
   import shutil
   shutil.copy2(b,out/f'{name}.png');return
 raise RuntimeError('No pixel-identical settled pair')
if row=='L01':settled('L01');sys.exit()
cmd('record','start',out/f'{row}.mp4','--scope','device','--hide-touches')
time.sleep(1)
try:
 if row=='F01':
  for step,g in enumerate([(540,2100,0,-600,500),(540,2100,0,-600,500),(540,1450,0,500,500),(540,1000,0,-800,600),(540,800,0,600,600)],1):
   
   if step==4:
    cmd('press','label="Close inspector"');time.sleep(1);cmd('press','label="Open files"');time.sleep(1.5)
   cmd('gesture','pan',*g);time.sleep(1.5);settled(f'step-{step}')
 elif row=='F11':
  cmd('gesture','pan',540,1400,0,650,700);time.sleep(2);settled('pull-refresh-end')
  cmd('press','label="More actions"');time.sleep(1)
  cmd('press',600,280);time.sleep(2);settled('overflow-refresh-end')
 else:
  plan=json.loads(pathlib.Path(sys.argv[4]).read_text())
  for step in plan:
   cmd(*step['args']);time.sleep(step.get('wait',1.5))
   if step.get('capture'):settled(step['capture'])
finally:
 cmd('record','stop')
 (out/'steps.json').write_text(json.dumps(log,indent=2))
print(out)
