#!/usr/bin/env python3
import argparse, datetime, json, pathlib, subprocess, time
p=argparse.ArgumentParser(); p.add_argument('side',choices=['before','after']); p.add_argument('--session',default='n1-32681'); args=p.parse_args()
root=pathlib.Path(__file__).resolve().parent
out=root/(args.side+'-flow-'+datetime.datetime.now(datetime.timezone.utc).strftime('%Y%m%dT%H%M%SZ')); out.mkdir()
start=time.monotonic(); events=[]
def run(*parts):
    elapsed=round(time.monotonic()-start,3)
    r=subprocess.run(['agent-device',*parts,'--session',args.session],text=True,capture_output=True)
    events.append({'seconds':elapsed,'command':['agent-device',*parts,'--session',args.session],'exit':r.returncode,'stdout':r.stdout,'stderr':r.stderr})
    (out/'driver-transcript.json').write_text(json.dumps(events,indent=2))
    print(elapsed,parts,r.returncode,r.stdout,r.stderr,flush=True)
    if r.returncode: raise RuntimeError('agent-device action failed')
    return r.stdout
run('record','start',str(out/f'N1-{args.side}.mp4'),'--quality','high','--hide-touches')
try:
    run('press','label="Git URL, Clone from a remote URL"','--settle')
    run('fill','label="https://github.com/org/repo.git"','https://github.com/pingdotgg/t3code/tree/main','--settle')
    run('snapshot','-i')
    time.sleep(2)
    run('press','label="Continue"','--settle')
    run('keyboard','dismiss')
    run('snapshot','--json')
    time.sleep(2)
    for attempt in range(1,7):
        a=out/f'settled-{attempt}-a.png'; b=out/f'settled-{attempt}-b.png'
        run('screenshot',str(a)); time.sleep(.5); run('screenshot',str(b))
        r=subprocess.run(['compare','-metric','AE',str(a),str(b),'null:'],capture_output=True,text=True)
        events.append({'settledPair':attempt,'requestGapSeconds':.5,'AE':r.stderr,'equal':r.returncode==0})
        (out/'driver-transcript.json').write_text(json.dumps(events,indent=2))
        if r.returncode==0:
            (out/f'N1-{args.side}.png').write_bytes(b.read_bytes()); break
    else: raise RuntimeError('No pixel-identical settled pair')
    time.sleep(2)
finally:
    run('record','stop')
print('OUTPUT',out)
