#!/usr/bin/env python3
from pathlib import Path
import subprocess,json,sys
root=Path('/tmp/lead-28684-r1/evidence-capture')
if len(sys.argv)>1:
 files=[Path(x) for x in sys.argv[1:]]
else:
 manifest=json.loads((root/'capture-manifest.json').read_text());files=[]
 for runs in manifest.values():
  for x in runs.values():
   files.extend(sorted(Path(x['run']).glob('*.png')))
 files.extend(sorted((root/'assembled').glob('*.png')))
 files.extend(sorted((root/'assembled').glob('*.mp4')))
 files.extend(sorted(root.glob('*.py')));files.extend(sorted(root.glob('*.mjs')))
 files.extend([root/'rebuild.md',root/'metadata.json',root/'pairs.json',root/'recordings.json',root/'after-discovery-10.json',root/'before-discovery-10.json'])
files=list(dict.fromkeys(files))
assert all('private' not in x.name and 'bootstrap' not in x.name for x in files)
for file in files:assert file.is_file(),file
out=root/'uploads.md';mapping=root/'upload-map.json';saved=json.loads(mapping.read_text()) if mapping.exists() else {}
for start in range(0,len(files),12):
 pending=[f for f in files[start:start+12] if str(f) not in saved]
 if not pending:continue
 result=subprocess.run(['ghdrop','upload','-m',*[str(x) for x in pending]],text=True,capture_output=True)
 if result.returncode:print(result.stdout,result.stderr,file=sys.stderr);sys.exit(result.returncode)
 print(result.stdout,end='',flush=True)
 lines=result.stdout.strip().splitlines();assert len(lines)==len(pending),(lines,pending)
 with out.open('a') as log:log.write(result.stdout)
 for file,line in zip(pending,lines):saved[str(file)]=line
 mapping.write_text(json.dumps(saved,indent=2))
