#!/bin/bash

set -e

SERVER="124.174.37.152"
PASS="Lsinfo_123\$#.hs"

SSH="sshpass -p ${PASS} ssh -o StrictHostKeyChecking=no root@${SERVER}"

echo "停止远程服务器 ${SERVER} 上的所有服务..."

$SSH bash << 'REMOTE'
set -e
source /root/.nvm/nvm.sh
ROOT="/lsinfo/ai/hellotax_ai"
LOG_DIR="${ROOT}/apm/logs"
LLM_LOG="${ROOT}/llm_service/logs"

stop_pid() {
  local name="$1" pid="$2"
  if [[ -n "$pid" ]] && kill -0 "$pid" 2>/dev/null; then
    kill "$pid"
    echo "✓ 已停止 ${name} (PID: ${pid})"
  fi
}

stop_port() {
  local port="$1"
  local pid
  pid=$(lsof -ti:"$port" 2>/dev/null || true)
  if [[ -n "$pid" ]]; then
    kill "$pid" 2>/dev/null || true
    echo "✓ 已停止端口 ${port} 的进程 (PID: ${pid})"
  fi
}

stop_llm_pid_file() {
  local name="$1" pid_file="$2" port="$3"
  if [[ -f "$pid_file" ]]; then
    local pid
    pid=$(cat "$pid_file")
    if kill -0 "$pid" 2>/dev/null; then
      kill "$pid"
      echo "✓ 已停止 ${name} (PID: ${pid})"
    else
      echo "  ${name} 未运行 (stale PID)"
    fi
    rm -f "$pid_file"
  else
    stop_port "$port"
  fi
}

echo "[1/10] 停止 API 文档服务 (8500)..."
if [[ -f "${LOG_DIR}/server-pids.txt" ]]; then
  source "${LOG_DIR}/server-pids.txt"
  stop_pid "API 文档服务" "${API_DOCS_PID:-}"
else
  stop_port 8500
fi

echo "[2/10] 停止 data_center 前端 (8890)..."
if [[ -n "${DC_FRONTEND_PID:-}" ]]; then
  stop_pid "data_center 前端" "$DC_FRONTEND_PID"
else
  stop_port 8890
fi

echo "[3/10] 停止 data_center Celery worker..."
if [[ -n "${DC_CELERY_PID:-}" ]]; then
  stop_pid "data_center Celery" "$DC_CELERY_PID"
else
  pkill -f "celery.*data_center_queue" 2>/dev/null || true
  echo "✓ 已停止 data_center Celery"
fi

echo "[4/10] 停止 data_center 后端 (8002)..."
if [[ -n "${DC_BACKEND_PID:-}" ]]; then
  stop_pid "data_center 后端" "$DC_BACKEND_PID"
else
  stop_port 8002
fi

echo "[5/10] 停止 training_center 前端 (8889)..."
if [[ -n "${TC_FRONTEND_PID:-}" ]]; then
  stop_pid "training_center 前端" "$TC_FRONTEND_PID"
else
  stop_port 8889
fi

echo "[6/10] 停止 training_center 后端 (8001)..."
if [[ -n "${TC_BACKEND_PID:-}" ]]; then
  stop_pid "training_center 后端" "$TC_BACKEND_PID"
else
  stop_port 8001
fi

echo "[7/10] 停止 saas_portal 前端 (8888)..."
if [[ -n "${SAAS_PID:-}" ]]; then
  stop_pid "saas_portal 前端" "$SAAS_PID"
else
  stop_port 8888
fi

echo "[8/10] 停止 base_platform 后端 (8000)..."
if [[ -n "${BASE_PID:-}" ]]; then
  stop_pid "base_platform 后端" "$BASE_PID"
else
  stop_port 8000
fi

[[ -f "${LOG_DIR}/server-pids.txt" ]] && rm -f "${LOG_DIR}/server-pids.txt"

echo "[9/10] 停止大模型服务..."
stop_llm_pid_file "vLLM (8100)"      "${LLM_LOG}/vllm-8100.pid"      8100
stop_llm_pid_file "Embedding (8200)" "${LLM_LOG}/embedding-8200.pid" 8200
stop_llm_pid_file "Reranker (8300)"  "${LLM_LOG}/reranker-8300.pid"  8300
stop_llm_pid_file "OCR (8400)"       "${LLM_LOG}/ocr-8400.pid"       8400

echo "[10/10] 停止 Nginx..."
/lsinfo/tools/nginx/sbin/nginx -s stop 2>/dev/null && echo "✓ 已停止 Nginx" || echo "  Nginx 未运行"

echo "[11/11] 停止 Docker 服务..."
cd "${ROOT}/data_center"    && docker-compose down && echo "✓ data_center Docker 已停止"
cd "${ROOT}/training_center" && docker-compose down && echo "✓ training_center Docker 已停止"
cd "${ROOT}/base_platform"  && docker-compose down && echo "✓ base_platform Docker 已停止"
cd "${ROOT}/apm/langfuse"   && docker-compose down && echo "✓ Langfuse 已停止"
cd "${ROOT}/apm"            && docker-compose down && echo "✓ APM 已停止"

echo ""
echo "================================"
echo "✓ 所有服务已停止"
echo "================================"
REMOTE

echo "远程服务器停止完成。"
