#!/usr/bin/env bash
# pool-destroy.sh — 销毁整个 agent 池
# 删除所有 slot worktree、PG/Redis 容器、Caddy 段、lock 文件、池根目录
set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# shellcheck source=../lib/agent-pool-lib.sh
source "${SCRIPT_DIR}/../lib/agent-pool-lib.sh"

usage() {
  cat <<EOF
用法:
  bash $0 [--force] [--yes]

选项:
  --force     即使有 claimed slot 也强制删（慎用，会丢工作）
  --yes       跳过确认（默认会要求 yes/no 确认）

效果:
  1. 释放所有 slot lock + 杀心跳守护
  2. 调 cleanup-worktree.sh 删每个 slot 的 worktree + PG/Redis 容器 + Caddy 段
  3. 删 pool/slot-N 本地分支
  4. 删池根目录（.agent-pool/）
EOF
}

FORCE=false
YES=false
while [[ $# -gt 0 ]]; do
  case "$1" in
    --force) FORCE=true; shift ;;
    --yes) YES=true; shift ;;
    -h|--help) usage; exit 0 ;;
    *) echo "未知参数: $1" >&2; exit 1 ;;
  esac
done

POOL_ROOT="$(ap_pool_root)"
if [[ ! -d "${POOL_ROOT}" ]]; then
  echo "pool-destroy: 池不存在（${POOL_ROOT}），无需销毁"
  exit 0
fi

slots=$(ap_list_slots)
n=$(echo "${slots}" | grep -c . || echo 0)

echo "pool-destroy: 池根 ${POOL_ROOT}"
echo "pool-destroy: 将销毁 ${n} 个 slot"

# claimed 检查
claimed=()
for s in ${slots}; do
  if [[ "$(ap_slot_state "${s}")" == claimed ]]; then
    claimed+=("${s}")
  fi
done
if (( ${#claimed[@]} > 0 )); then
  echo "pool-destroy: ⚠️  发现 ${#claimed[@]} 个 claimed slot: ${claimed[*]}"
  if [[ "${FORCE}" != true ]]; then
    echo "pool-destroy: 拒绝销毁。先 release 这些 slot，或加 --force 强制" >&2
    exit 1
  fi
fi

if [[ "${YES}" != true ]]; then
  read -r -p "pool-destroy: 确认销毁整个池？输入 yes 继续: " ans
  if [[ "${ans}" != "yes" ]]; then
    echo "pool-destroy: 已取消"
    exit 0
  fi
fi

CLEANUP_SCRIPT="${SCRIPT_DIR}/../cleanup-worktree.sh"
MAIN_REPO_DIR="$(cd "$(git rev-parse --path-format=absolute --git-common-dir)/.." && pwd)"

for s in ${slots}; do
  slot_dir="$(ap_slot_dir "${s}")"
  echo
  echo "--- 销毁 slot-${s} (${slot_dir}) ---"

  # 1. 杀心跳守护
  hb_pid="$(ap_read_lock "${s}" heartbeat_pid 2>/dev/null || true)"
  if [[ -n "${hb_pid}" ]]; then
    kill "${hb_pid}" 2>/dev/null || true
  fi

  # 2. 删 worktree + PG/Redis 容器（cleanup-worktree.sh 全干）
  if [[ -d "${slot_dir}" ]]; then
    bash "${CLEANUP_SCRIPT}" "${slot_dir}" --force 2>&1 | sed 's/^/  /'
  fi

  # 3. 删 park 分支
  git -C "${MAIN_REPO_DIR}" branch -D "pool/slot-${s}" 2>&1 | sed 's/^/  /' || true

  # 4. 删 lock / flock 文件
  rm -f "$(ap_lock_file "${s}")" "$(ap_flock_file "${s}")"
done

# 5. 删池根
echo
if [[ -z "$(ls -A "${POOL_ROOT}" 2>/dev/null)" ]]; then
  rmdir "${POOL_ROOT}"
  echo "pool-destroy: 池根目录已删 ${POOL_ROOT}"
else
  echo "pool-destroy: 池根目录非空，残留如下（请手工检查）："
  ls -la "${POOL_ROOT}"
fi

# 6. 删 .code-workspace 文件（VSCode multi-root 入口）
ap_remove_code_workspace || true

echo "pool-destroy: 完成"
