import json, datetime, subprocess, sys
from pathlib import Path
proof = Path(sys.argv[1])
out = Path(sys.argv[2])
def dt(s): return datetime.datetime.fromisoformat(s.replace('Z', '+00:00'))
for side in ['base', 'head']:
    report = json.loads((proof / side / 'report.json').read_text())
    attempt = [r for r in report['run']['results'] if r['attempts']][0]['attempts'][0]
    video = next(a for a in attempt['artifacts'] if a['kind'] == 'video')
    epoch = dt(video['startedAt'])
    steps = attempt['steps']
    add = next(s for s in steps if 'Add variable' in s.get('label', ''))
    start = (dt(add['startedAt']) - epoch).total_seconds() + add['durationMs']/1000 + .15
    terminal = next(s for s in steps if 'Toggle terminal drawer' in s.get('label', ''))
    enter = next(s for s in steps if s['api'] == 'browser.keyboard.press' and s.get('label') == 'Enter')
    a = (dt(terminal['startedAt']) - epoch).total_seconds() - start
    b = (dt(enter['startedAt']) - epoch).total_seconds() - start + .4
    filters = f"trim=start={start},setpts=PTS-STARTPTS,drawbox=x=255:y=520:w=1025:h=280:color=white:t=fill:enable='between(t,{a},{b})',setpts=2*PTS"
    output = out / (side + '-settings-runtime.mp4')
    subprocess.run(['ffmpeg', '-hide_banner', '-loglevel', 'error', '-i', str(proof / side / 'results' / video['path']), '-vf', filters, '-an', '-c:v', 'libx264', '-crf', '18', '-pix_fmt', 'yuv420p', '-movflags', '+faststart', str(output)], check=True)
    print(side, start, a, b, str(output))
