"""Run after pairing and waiting for Chats, on either commit. No app code is changed.
The connection file is private; upload this driver, never connection.json.
"""
import argparse,subprocess,pathlib,datetime,time,hashlib
p=argparse.ArgumentParser();p.add_argument('--session',required=True);p.add_argument('--connection',required=True);p.add_argument('--out',required=True);p.add_argument('--tablet',action='store_true');a=p.parse_args()
out=pathlib.Path(a.out)/datetime.datetime.now().strftime('%Y%m%d-%H%M%S');out.mkdir(parents=True)
def dev(*args):
 r=subprocess.run(['agent-device',*args,'--session',a.session],capture_output=True,text=True)
 (out/('actions.txt')).open('a').write(r.stdout+r.stderr)
 if r.returncode: raise RuntimeError('device action failed; inspect private actions.txt')
 return r
dev('press','role=button label="Chats"','--settle')
try:
 dev('record','start',str(out/'flow.mp4'),'--hide-touches')
 dev('press','role=button label="Usage"','--settle')
 subprocess.run(['python3',str(pathlib.Path(__file__).with_name('drive.py')),'link','--session',a.session,'--connection',a.connection],check=True)
 dev('wait','text','No conversation yet','60000')
 dev('snapshot','-i')
 for i in range(8):
  dev('screenshot',str(out/f'thread-{i}-a.png'))
  time.sleep(.5)
  dev('screenshot',str(out/f'thread-{i}-b.png'))
  if (out/f'thread-{i}-a.png').read_bytes()==(out/f'thread-{i}-b.png').read_bytes():
   (out/'stable-thread.png').write_bytes((out/f'thread-{i}-b.png').read_bytes())
   break
 else: raise RuntimeError('No pair of identical screenshots')
 time.sleep(2)
 if not a.tablet: dev('press','role=button label="Back"','--settle')
 dev('press','role=button label="Usage"','--settle')
 time.sleep(10)
finally:
 dev('record','stop')
print(out)
