#!/usr/bin/env bash
# usage: tools/author/launch.sh <job_dir>   (job_dir holds job.json + reference images; writes PROMPT.txt, runs Astra)
# job.json: {name, slug, refs:[...], size, tris, mats, frame, nodes, feedback (optional), effort}
set -euo pipefail
J=$(readlink -f "$1"); cd "$J"
python3 - "$J" <<'PY'
import json, sys, os
j = json.load(open(os.path.join(sys.argv[1], 'job.json')))
t = open(os.path.join(os.path.dirname(os.path.abspath(__file__)) if False else os.path.expanduser('~/forge-build/forge-assets/tools/author'), 'author.tpl')).read()
fb = j.get('feedback')
fb = ('\nThe operator reviewed the previous version (previous.glb / previous renders here) and asked for this. Fix it first, '
      'keep what was good:\n  "' + fb.replace('"', "'") + '"\n') if fb else ''
rep = {'__NAME__': j['name'], '__REFS__': ', '.join(j['refs']), '__FEEDBACK__': fb, '__REMOTE__': f"/root/fal-author/{j['slug']}-v{j.get('version', 1)}",
       '__SIZE__': j['size'], '__TRIS__': j['tris'], '__MATS__': str(j['mats']), '__FRAME__': j['frame'], '__NODES__': j.get('nodes', ''),
       '__SLUG__': j['slug']}
for k, v in rep.items(): t = t.replace(k, v)
open(os.path.join(sys.argv[1], 'PROMPT.txt'), 'w').write(t)
PY
imgs=(); for r in $(python3 -c "import json;print(' '.join(json.load(open('job.json'))['refs']))"); do imgs+=(-i "$r"); done
EFF=$(python3 -c "import json;print(json.load(open('job.json')).get('effort','medium'))")
date -u +%FT%TZ > started.txt
timeout 7200 codex exec -m gpt-6-astra -c model_reasoning_effort="$EFF" -c web_search='"disabled"' \
  --dangerously-bypass-approvals-and-sandbox --dangerously-bypass-hook-trust --skip-git-repo-check \
  "${imgs[@]}" - < PROMPT.txt > astra.log 2>&1; rc=$?
date -u +%FT%TZ > finished.txt; echo "$rc" > rc.txt; exit $rc
