import sys,subprocess
from pathlib import Path
shots=Path(sys.argv[1]); out=Path(sys.argv[2]); side=sys.argv[3]
def find(label):
    return sorted(shots.glob('*-'+label+'.png'))[-1]
def sequence(name, stages):
    panels=[]
    for i,(label,caption) in enumerate(stages):
        src=find(label)
        panel=out/(side+'-'+name+'-panel-'+str(i)+'.png')
        subprocess.run(['convert',str(src),'-background','white','-gravity','north','-splice','0x44','-font','DejaVu-Sans','-pointsize','16','-fill','#202020','-annotate','+0+12',caption,str(panel)],check=True)
        panels.append(str(panel))
    subprocess.run(['convert',*panels,'+append',str(out/(side+'-ios-'+name+'.png'))],check=True)
for name,title in [('project-a-thread','A thread / Project A'),('project-b-isolation','B thread / Project B'),('project-a-worktree','A worktree / Project A')]:
    if list(shots.glob('*-'+name+'-model-search.png')):
        sequence(name,[(name+'-context','1. '+title),(name+'-opening-catalog','2. OpenCode catalog (unmasked)'),(name+'-model-search','3. Project-only model search')])

if list(shots.glob('*-project-a-new-task-draft-model-search.png')):
    sequence('project-a-new-task-draft',[('project-a-new-task-draft-context','1. New thread draft / Project A'),('project-a-new-task-draft-opening-catalog','2. OpenCode catalog (unmasked)'),('project-a-new-task-draft-model-search','3. Project-only model search')])
