#!/usr/bin/env bash
# 젠슨 호외 일일 준비기. 매일 크론(예: 13:00). 가장 이른 미준비 장 1편을 생성·검증·스테이징한다.
# 공개는 별도 22:00 크론(publish_jensen_extra.sh)이 그날 due 에피소드를 노출.
set -uo pipefail
BASE=/home/ukimkj/podcast; JX=$BASE/jensen_extra
PIPE=/home/ukimkj/icloud/ai_workspace/notebooklm_audio_pipeline
QUEUE=$JX/jensen_queue.json
LOG=$JX/prepare.log
note(){ echo "$(date '+%F %T') $*" >>"$LOG"; }
TG(){ python3 "$PIPE/tools/telegram_notify.py" --message "$1" >>"$LOG" 2>&1 || true; }

exec 9>/tmp/jensen_prepare.lock; flock -n 9 || { note "이미 실행 중, 종료"; exit 0; }
bash "$PIPE/tools/ubuntu_browser_keeper.sh" >>"$LOG" 2>&1 || true

INFO=$(python3 -c "
import json
q=json.load(open('$QUEUE'))
c=[x for x in q if x['ep']>=2 and not x['prepared']]
if not c: raise SystemExit
e=sorted(c,key=lambda x:x['ep'])[0]
print('\t'.join([e['nn'], e['ko_title'].split('] ',1)[1], e['source']]))
" 2>/dev/null) || true
IFS=$'\t' read -r NN TITLE SRC <<<"${INFO:-}"
[ -n "${NN:-}" ] || { note "준비할 장 없음(전부 완료)"; exit 0; }

note "=== ch$NN 준비 시작: $TITLE ==="
P=$JX/gen_prompt_ch$NN.md
sed -e "s/@@NN@@/$NN/g" -e "s|@@SRC@@|$SRC|g" -e "s/@@TITLE@@/$TITLE/g" "$JX/gen_worker_template.md" > "$P"

rm -f "$JX/ch${NN}_manifest.json" "$JX/ch${NN}_BLOCKED.txt"
cd "$PIPE"
codex exec --dangerously-bypass-approvals-and-sandbox "$(cat "$P")" >> "$JX/ch${NN}_gen.log" 2>&1 || note "codex 비정상 종료코드"

if [ -f "$JX/ch${NN}_BLOCKED.txt" ]; then note "ch$NN BLOCKED"; TG "[젠슨 호외] ch$NN 준비 BLOCKED(세션/9222). 사람 확인 필요"; exit 1; fi
OK=$(python3 -c "
import json
try:
 m=json.load(open('$JX/ch${NN}_manifest.json'))
 print('1' if m['ko']['status']=='OK' and m['en']['status']=='OK' else '0')
except Exception: print('0')
")
if [ "$OK" != "1" ]; then note "ch$NN 생성 실패/미완"; TG "[젠슨 호외] ch$NN 생성 실패. 다음 실행 재시도"; exit 1; fi

if bash "$BASE/stage_jensen.sh" "$NN" >>"$LOG" 2>&1; then
  python3 -c "
import json
q=json.load(open('$QUEUE'))
for x in q:
    if x['nn']=='$NN': x['prepared']=True
json.dump(q,open('$QUEUE','w'),ensure_ascii=False,indent=1)
"
  note "ch$NN 준비+스테이징 완료"
  TG "[젠슨 호외] ch$NN '$TITLE' 준비완료. 해당일 22:00 자동 공개 예약"
else
  note "ch$NN 스테이징 실패"; TG "[젠슨 호외] ch$NN 스테이징 실패"; exit 1
fi
