#!/bin/bash
# '사랑했지만' 23샷(표적 9씬) scene_image_pipeline 운전 루프 —
# drive_step.sh 의 이 프로젝트판. 규칙 동일:
#   · 돌고 있으면 둔다 · completed=물증 찍고 종료
#   · failed/partial=resume 최대 3회, 그래도 그 상태면 사람 몫 · force 금지
set -u
P=c7e3b2e7-c545-4516-93b2-62a51a74d794
E=7c902020-4451-4967-9eb6-1e53c2b9b717
BASE=http://localhost:8000/api/v1/projects/$P/episodes/$E
STEP=scene_image_pipeline
TRIES=0
MAX_TRIES=3
IMG_DIR=../projects/$P/images/$E/scene/recipe

relogin() {
  curl -s -c /tmp/th_drive23.cookie -X POST \
    http://localhost:8000/api/v1/auth/login \
    -H 'Content-Type: application/json' \
    -d '{"username":"admin","password":"admin123"}' -o /dev/null
}
say() { echo "$(date +%H:%M:%S) $*"; }

relogin
say "기동 — 첫 resume 호출"
curl -s -b /tmp/th_drive23.cookie -X POST "$BASE/steps/$STEP?mode=resume" \
  -o /dev/null -w "  재개 HTTP %{http_code}\n"
sleep 20
while true; do
  ST=$(PGPASSWORD=theroad_dev_2026 psql -h localhost -U theroad -d theroad -t -A -c \
    "SELECT status||'|'||coalesce(completed_count,0)||'/'||coalesce(applicable_count,0) \
     FROM step_run WHERE episode_id='$E' AND step_id='$STEP';" 2>/dev/null)
  case "$ST" in
    running*) say "진행 중 $ST";;
    completed*)
      N=$(ls "$IMG_DIR" 2>/dev/null | wc -l | tr -d ' ')
      say "완료 $ST — 물증: recipe 파일 ${N}개, 최신 5개:"
      ls -lt "$IMG_DIR" | head -6
      exit 0;;
    failed*|partial*)
      if [ "$TRIES" -ge "$MAX_TRIES" ]; then
        say "★사람이 봐야 한다 — $ST 를 ${MAX_TRIES}회 재개해도 그대로다."
        exit 1
      fi
      TRIES=$((TRIES+1))
      say "$ST — resume 재개 [$TRIES/$MAX_TRIES]"
      relogin
      curl -s -b /tmp/th_drive23.cookie -X POST "$BASE/steps/$STEP?mode=resume" \
        -o /dev/null -w "  재개 HTTP %{http_code}\n";;
    "") say "상태 조회 실패 — 재시도";;
    *) say "예상 밖 상태: $ST — 판단 보류";;
  esac
  sleep 60
done
