import argparse, pathlib, subprocess, time, hashlib, json
p=argparse.ArgumentParser()
p.add_argument('--session',required=True)
p.add_argument('--out',required=True)
a=p.parse_args()
out=pathlib.Path(a.out)/time.strftime('%Y%m%d-%H%M%S'); out.mkdir(parents=True)
log=[]
def run(*args):
    r=subprocess.run(['agent-device',*args,'--session',a.session],text=True,capture_output=True)
    log.append({'command':list(args),'stdout':r.stdout,'stderr':r.stderr,'returncode':r.returncode})
    (out/'transcript.json').write_text(json.dumps(log,indent=2))
    print(r.stdout,r.stderr,flush=True)
    r.check_returncode()
    return r.stdout
def still(name):
    for n in range(5):
        x=out/(name+'-check.png'); y=out/(name+'.png')
        run('screenshot',str(x)); time.sleep(.5); run('screenshot',str(y))
        if hashlib.sha256(x.read_bytes()).digest()==hashlib.sha256(y.read_bytes()).digest(): return
    raise RuntimeError('Screen did not stabilize')
run('press','label="Chats"','--settle')
run('record','start',str(out/'back-sequence.mp4'),'--scope','device','--hide-touches')
for tab in ['Pulls','Usage']:
    run('press',f'label="{tab}"','--settle')
    run('snapshot','-i')
    time.sleep(1)
    run('back','--system','--settle')
    run('appstate')
    run('snapshot','-i')
    still(tab.lower()+'-after-back')
    run('open','com.t3tools.t3code.dev','--foreground')
    run('press','label="Chats"','--settle')
run('back','--system','--settle')
run('appstate')
run('snapshot','-i')
still('threads-after-first-back')
run('record','stop')
print('OUTPUT',out)
