#!/bin/bash
# bot-runner.sh — BOT 무한 실행기 (Hot-Swap 지원)
# Usage: ./bot-runner.sh <game-slug>
# Sub Agent가 /tmp/bot_{slug}_v{N}.js를 만들면 자동으로 교체

GAME_SLUG=$1
if [ -z "$GAME_SLUG" ]; then
  echo "Usage: ./bot-runner.sh <game-slug>"
  exit 1
fi

ARCADE_DIR="/home/ubuntu/sites/arcade"
BOT_DIR="/tmp/bots"
SNAPSHOT_DIR="/tmp/bot_snapshots/${GAME_SLUG}"
LOG_DIR="/tmp/bot_logs"

mkdir -p "$BOT_DIR" "$SNAPSHOT_DIR" "$LOG_DIR"

BOT_VERSION=1
BOT_FILE="$BOT_DIR/bot_${GAME_SLUG}_v${BOT_VERSION}.js"

# 첫 번째 BOT 파일이 생길 때까지 대기
echo "[RUNNER] Waiting for first bot: $BOT_FILE"
while [ ! -f "$BOT_FILE" ]; do
  sleep 2
done

while true; do
  echo ""
  echo "[RUNNER] =============================="
  echo "[RUNNER] Starting bot v${BOT_VERSION}: $BOT_FILE"
  echo "[RUNNER] Time: $(date)"
  echo "[RUNNER] =============================="

  # BOT 실행 (백그라운드)
  cd "$ARCADE_DIR"
  NODE_PATH=./node_modules node "$BOT_FILE" \
    --version "$BOT_VERSION" \
    --snapshot-dir "$SNAPSHOT_DIR" \
    --log-dir "$LOG_DIR" \
    >> "$LOG_DIR/${GAME_SLUG}_v${BOT_VERSION}.log" 2>&1 &
  BOT_PID=$!

  echo "[RUNNER] Bot PID: $BOT_PID"

  # 새 버전 파일이 생기거나 BOT이 스스로 종료될 때까지 대기
  NEXT_VERSION=$((BOT_VERSION + 1))
  NEW_FILE="$BOT_DIR/bot_${GAME_SLUG}_v${NEXT_VERSION}.js"

  while true; do
    # 새 버전 파일 확인
    if [ -f "$NEW_FILE" ]; then
      echo "[RUNNER] New version detected: v${NEXT_VERSION}"
      break
    fi

    # BOT 프로세스가 종료됐는지 확인
    if ! kill -0 $BOT_PID 2>/dev/null; then
      echo "[RUNNER] Bot v${BOT_VERSION} exited on its own"
      # 새 버전이 없으면 종료
      if [ ! -f "$NEW_FILE" ]; then
        echo "[RUNNER] No new version available. Stopping."
        exit 0
      fi
      break
    fi

    sleep 3
  done

  # Hot-swap: 기존 BOT 종료
  if kill -0 $BOT_PID 2>/dev/null; then
    echo "[RUNNER] Stopping bot v${BOT_VERSION} (PID: $BOT_PID)"
    kill $BOT_PID 2>/dev/null
    wait $BOT_PID 2>/dev/null
  fi

  # 버전 업
  BOT_VERSION=$NEXT_VERSION
  BOT_FILE="$NEW_FILE"

  # 잠시 대기 (게임 상태 안정화)
  sleep 2
done
