#!/bin/bash
set -e

PROJECT_NAME="fastapij"
COMPOSE_FILE="docker-compose.yml"
BASE_URL="https://www.mldong.com/deploy/mldong-fastapi-jeeflow"

# 检查 docker compose v2
docker compose version >/dev/null 2>&1 || { echo "❌ 需要 Docker Compose v2（Docker 20.10+）"; exit 1; }

# 检查是否已在运行
if docker compose -p $PROJECT_NAME ps --status running 2>/dev/null | grep -q fastapij; then
    echo "⚠️  fastapi-jeeflow 服务已在运行"
    echo "   重新部署请先执行: docker compose -p $PROJECT_NAME down -v"
    exit 0
fi

# 创建临时目录
cd "$(dirname "$0")"

# 如果不在脚本所在目录，则下载到子目录
if [ ! -f "$COMPOSE_FILE" ]; then
    mkdir -p ./mldong-fastapi-jeeflow
    cd ./mldong-fastapi-jeeflow
    echo "📥 从 ${BASE_URL} 下载配置文件..."
    curl -fsSL -o ${COMPOSE_FILE} ${BASE_URL}/${COMPOSE_FILE}
    if [ ! -f "${COMPOSE_FILE}" ]; then
        echo "❌ 下载配置文件失败"
        exit 1
    fi
fi

# 拉取镜像
echo "📦 拉取镜像..."
docker compose -p $PROJECT_NAME pull

# 启动服务
echo "🚀 启动服务..."
docker compose -p $PROJECT_NAME up -d

# 等待 MySQL 健康
echo "⏳ 等待 MySQL 初始化（首次约 2 分钟）..."
for i in $(seq 1 100); do
    status=$(docker inspect --format='{{.State.Health.Status}}' fastapij-mysql 2>/dev/null || echo "unknown")
    if [ "$status" = "healthy" ]; then
        echo "✅ MySQL 就绪"
        break
    fi
    if [ "$i" -eq 100 ]; then
        echo "⚠️  MySQL 启动超时，请检查: docker logs fastapij-mysql"
    fi
    sleep 3
done

echo "⏳ 等待 API 就绪..."
for i in $(seq 1 100); do
    body=$(curl -s -m 15 -X POST "http://127.0.0.1:26100/sys/login" \
      -H "Content-Type: application/json" \
      -d '{"userName":"superAdmin","password":"123456"}' || true)
    if echo "$body" | grep -qE '"code"[[:space:]]*:[[:space:]]*0'; then
        echo "✅ API 就绪"
        break
    fi
    if [ "$i" -eq 100 ]; then
        echo "⚠️  API 启动超时，请检查: docker logs fastapij-api"
    fi
    sleep 3
done

echo ""
echo "=== 🎉 部署完成 ==="
echo "  前端: http://localhost:23180"
echo "  API:  http://localhost:26100"
echo "  登录: superAdmin / 123456"
echo ""
echo "  清理: docker compose -p $PROJECT_NAME down -v"
