#!/usr/bin/env bash
# 停止后台启动的 E2E 测试栈（支持 Docker 前端容器）
set -euo pipefail

PID_FILE="/tmp/e2e-stack.pid"
E2E_FRONTEND_CONTAINER="ffoa-test-frontend"

# ── 清理 Docker 容器 + .next 缓存 volume ──────────────────
if docker ps -aq --filter "name=${E2E_FRONTEND_CONTAINER}" 2>/dev/null | grep -q .; then
  docker rm -f "${E2E_FRONTEND_CONTAINER}" >/dev/null
  echo "✅ 已停止前端容器 ${E2E_FRONTEND_CONTAINER}"
fi
if docker volume ls -q 2>/dev/null | grep -q "${E2E_FRONTEND_CONTAINER}-next"; then
  docker volume rm "${E2E_FRONTEND_CONTAINER}-next" >/dev/null 2>&1 || true
  echo "✅ 已清理 .next 缓存 volume"
fi

# ── 清理可能残留的宿主机 3010 next-server 进程 ─────────────
# 防止 AI agent 绕过 Docker 直接在宿主机启动 next dev 导致端口/锁文件占用
E2E_FRONTEND_PORT="${E2E_FRONTEND_PORT:-3010}"
STALE_PID=$(lsof -ti tcp:"${E2E_FRONTEND_PORT}" -sTCP:LISTEN 2>/dev/null || true)
if [[ -n "${STALE_PID}" ]]; then
  kill "${STALE_PID}" 2>/dev/null || true
  echo "✅ 已停止宿主机 ${E2E_FRONTEND_PORT} 端口进程 (PID ${STALE_PID})"
fi

# ── 清理 PID 文件中记录的进程 ─────────────────────────────
if [[ ! -f "${PID_FILE}" ]]; then
  echo "⚠️  未找到 PID 文件，测试栈可能未在后台运行"
  exit 0
fi

while read -r entry; do
  if [[ "${entry}" == docker:* ]]; then
    continue
  fi
  if kill -0 "${entry}" 2>/dev/null; then
    kill "${entry}"
    echo "✅ 已停止进程 ${entry}"
  fi
done < <(tr ' ' '\n' < "${PID_FILE}")

rm -f "${PID_FILE}"
echo "🛑 E2E 测试栈已停止"
