#!/usr/bin/env bash
# pool-resize.sh — 调整 agent 池大小
# 增大：补建缺失的 slot；缩小：删除尾部 slot（拒绝删 claimed slot）
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 --size N [--force]

选项:
  --size N    目标 slot 数量
  --force     即使要删的 slot 处于 claimed 状态也强制删（慎用，会丢工作）

行为:
  - 当前 < N → 补建缺失的 slot（走 setup-worktree.sh 全套）
  - 当前 > N → 删除尾部 slot；如果 slot 处于 claimed 状态会拒绝（除非 --force）
EOF
}

if [[ $# -lt 2 ]]; then
  usage; exit 1
fi

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

if [[ -z "${TARGET}" || ! "${TARGET}" =~ ^[0-9]+$ ]]; then
  echo "pool-resize: --size N 必须是数字" >&2
  exit 1
fi

POOL_ROOT="$(ap_pool_root)"
CURRENT=$(ap_list_slots | wc -l)

echo "pool-resize: 当前 ${CURRENT} 个 slot → 目标 ${TARGET}"

if (( TARGET == CURRENT )); then
  echo "pool-resize: 无需改动"
  exit 0
fi

if (( TARGET > CURRENT )); then
  echo "pool-resize: 扩容，调用 pool-init 补建缺失 slot"
  FFOA_AGENT_POOL_SIZE="${TARGET}" bash "${SCRIPT_DIR}/pool-init.sh" --size "${TARGET}"
  exit 0
fi

# 缩容：删尾部
echo "pool-resize: 缩容，将删除 slot $((TARGET+1))..${CURRENT}"
CLEANUP_SCRIPT="${SCRIPT_DIR}/../cleanup-worktree.sh"

for ((i=CURRENT; i>TARGET; i--)); do
  slot_dir="$(ap_slot_dir "${i}")"
  state="$(ap_slot_state "${i}")"
  if [[ "${state}" == claimed && "${FORCE}" != true ]]; then
    echo "pool-resize: slot-${i} 处于 claimed 状态，拒绝删除（--force 强制）" >&2
    exit 1
  fi
  echo "  删除 slot-${i} (${slot_dir})"
  if [[ -d "${slot_dir}" ]]; then
    bash "${CLEANUP_SCRIPT}" "${slot_dir}" --force 2>&1 | sed 's/^/    /'
  fi
  git -C "$(git rev-parse --path-format=absolute --git-common-dir)/.." \
    branch -D "pool/slot-${i}" 2>&1 | sed 's/^/    /' || true
  rm -f "$(ap_lock_file "${i}")" "$(ap_flock_file "${i}")"
done

ap_write_code_workspace || true

echo "pool-resize: 完成。当前池大小：$(ap_list_slots | wc -l)"
