import subprocess,sys,pathlib,time,json,datetime,os
from PIL import Image,ImageChops,ImageDraw
ROOT=pathlib.Path('/tmp/lead-25828-r3/capture/run-'+os.environ.get('CAPTURE_RUN','20261028T034200Z'));ROOT.mkdir(exist_ok=True)
SESSION=os.environ.get('CAPTURE_SESSION','lead-25828-r3-cap-pixel-before')
REPO=os.environ.get('CAPTURE_REPO','/home/ubuntu/wt/pr-25828-before')
def ad(*args):
 args=list(args)
 if args[0]=="swipe" and len(args)==6:args=["gesture","pan",args[1],args[2],args[3]-args[1],args[4]-args[2],args[5]]
 if args[0]=='press' and len(args)>1 and args[1] in ['label=\"Back\"','label=\"Terminal\"','label=\"Show keyboard\"','label=\"Dismiss keyboard\"','label=\"Done\"','label=\"Copy All\"','label=\"Attach visible output\"','label=\"Terminal options\"']:
  args[1]+=' role=\"button\"'
 p=subprocess.run(['agent-device',*map(str,args),'--session',SESSION],cwd=REPO,capture_output=True,text=True)
 with (ROOT/'actions.jsonl').open('a') as f:f.write(json.dumps({'utc':datetime.datetime.now(datetime.timezone.utc).isoformat(),'args':list(map(str,args)),'returncode':p.returncode,'stdout':p.stdout,'stderr':p.stderr})+'\n')
 print((p.stdout+p.stderr)[-2500:],flush=True)
 if p.returncode:raise RuntimeError('agent-device failed')
 return p

def still(name):
 density=['--pixel-density','2' if 'ipad' in SESSION else '3'] if 'pixel' not in SESSION else []
 for i in range(6):
  a=ROOT/f'{name}-probe-{i}.png';b=ROOT/f'{name}.png'
  ad('screenshot',a,'--normalize-status-bar',*density);time.sleep(.5);ad('screenshot',b,'--normalize-status-bar',*density)
  if 'pixel' not in SESSION:
   for path in [a,b]:
    im=Image.open(path).convert('RGB');im.save(path.with_name(path.stem+'-raw.png'));ImageDraw.Draw(im).rectangle((0,0,im.width,63 if 'ipad' in SESSION else 179),fill=(64,64,64));im.save(path)
  if ImageChops.difference(Image.open(a).convert('RGB'),Image.open(b).convert('RGB')).getbbox() is None:
   print('PIXEL_IDENTICAL '+str(b));return
 raise RuntimeError('Unsettled capture')
def menu(label):
 tree=ad('snapshot','-i').stdout
 role='menu-item' if '[menu-item] \"'+label+'\"' in tree else 'cell'
 ad('press',f'role=\"{role}\" label=\"{label}\"','--settle')
def fixture(name):subprocess.run(['node','/tmp/lead-25828-r3/capture/terminal-fixture.mjs',name],cwd=REPO+'/apps/server',check=True)
def cdp(expr):return subprocess.run(['node','/tmp/lead-25828-r3/capture/cdp.mjs',os.environ.get('CAPTURE_METRO','8081'),expr],cwd=REPO+'/apps/server',capture_output=True,text=True,check=True).stdout
if __name__=='__main__':
 if sys.argv[1]=='still':still(sys.argv[2])
 else:ad(*sys.argv[1:])
