#!/bin/bash

# 瑞小美团队开发环境启动脚本
# 域名：kpl.ireborn.com.cn
# 使用方法：
#   ./start-kpl.sh                    # 启动基础服务
#   ./start-kpl.sh --with-admin       # 启动服务 + phpMyAdmin

set -e

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 日志函数
log_info() {
    echo -e "${BLUE}[INFO]${NC} $1"
}

log_success() {
    echo -e "${GREEN}[SUCCESS]${NC} $1"
}

log_warning() {
    echo -e "${YELLOW}[WARNING]${NC} $1"
}

log_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# 检查Docker是否运行
check_docker() {
    if ! docker info >/dev/null 2>&1; then
        log_error "Docker 未运行，请先启动 Docker"
        exit 1
    fi
}

# 构建镜像
build_images() {
    log_info "构建KPL开发环境镜像..."
    docker compose -f docker-compose.kpl.yml build --no-cache
}

# 启动服务
start_services() {
    local profiles=""
    
    # 解析命令行参数
    case "${1:-}" in
        --with-admin)
            profiles="--profile admin"
            log_info "启动KPL服务（包含 phpMyAdmin）..."
            ;;
        *)
            log_info "启动KPL基础服务（前后端+数据库）..."
            ;;
    esac
    
    # 启动所有服务
    docker compose -f docker-compose.kpl.yml up -d $profiles
}

# 等待服务就绪
wait_for_services() {
    log_info "等待服务启动..."
    
    # 等待数据库
    log_info "等待 MySQL 数据库启动..."
    timeout=60
    while ! docker exec kpl-mysql-dev mysqladmin ping -h"localhost" --silent 2>/dev/null; do
        timeout=$((timeout - 1))
        if [ $timeout -eq 0 ]; then
            log_error "MySQL 启动超时"
            return 1
        fi
        sleep 1
    done
    log_success "MySQL 数据库已就绪"
    
    # 等待 Redis
    log_info "等待 Redis 缓存启动..."
    timeout=30
    while ! docker exec kpl-redis-dev redis-cli ping 2>/dev/null | grep -q PONG; do
        timeout=$((timeout - 1))
        if [ $timeout -eq 0 ]; then
            log_error "Redis 启动超时"
            return 1
        fi
        sleep 1
    done
    log_success "Redis 缓存已就绪"
    
    # 等待后端服务
    log_info "等待后端服务启动..."
    timeout=60
    while ! curl -s http://localhost:8001/health >/dev/null 2>&1; do
        timeout=$((timeout - 1))
        if [ $timeout -eq 0 ]; then
            log_error "后端服务启动超时"
            return 1
        fi
        sleep 1
    done
    log_success "后端服务已就绪"
    
    # 等待前端服务
    log_info "等待前端服务启动..."
    timeout=60
    while ! curl -s http://localhost:3002/ >/dev/null 2>&1; do
        timeout=$((timeout - 1))
        if [ $timeout -eq 0 ]; then
            log_error "前端服务启动超时"
            return 1
        fi
        sleep 1
    done
    log_success "前端服务已就绪"
}

# 显示服务状态
show_status() {
    echo ""
    log_success "🎉 瑞小美团队开发环境启动成功！"
    echo ""
    echo "📋 服务访问地址："
    echo "  🌐 正式域名访问:     https://kpl.ireborn.com.cn"
    echo "  🖥️  本地前端服务:     http://localhost:3002"
    echo "  🔧 本地后端API:      http://localhost:8001"
    echo "  📚 API文档:         http://localhost:8001/docs"
    echo "  🗄️  MySQL数据库:    localhost:3308"
    echo "  🔄 Redis缓存:      localhost:6380"
    
    if docker ps --filter "name=kpl-phpmyadmin-dev" --format "{{.Names}}" | grep -q phpmyadmin; then
        echo "  🛠️  phpMyAdmin:     http://localhost:8081"
    fi
    
    echo ""
    echo "🔧 常用命令："
    echo "  查看日志: docker compose -f docker-compose.kpl.yml logs -f [service_name]"
    echo "  停止服务: ./stop-kpl.sh 或 docker compose -f docker-compose.kpl.yml down"
    echo "  重启服务: docker compose -f docker-compose.kpl.yml restart [service_name]"
    echo ""
    echo "💡 开发提示："
    echo "  - 🔥 代码修改会自动重载（热重载已启用）"
    echo "  - 🎨 前端: 修改 kaopeilian-frontend/src/ 目录下的文件"
    echo "  - ⚙️  后端: 修改 kaopeilian-backend/app/ 目录下的文件"
    echo "  - 🔒 已配置HTTPS访问，使用域名访问更安全"
    echo ""
    echo "📌 注意："
    echo "  - 此环境与演示系统（aiedu.ireborn.com.cn）完全隔离"
    echo "  - 拥有独立的数据库和Redis实例"
    echo ""
}

# 主函数
main() {
    echo "🚀 瑞小美团队开发环境启动器"
    echo "================================"
    
    # 检查 Docker
    check_docker
    
    # 启动服务（不重新构建）
    start_services "$@"
    
    # 等待服务就绪
    if wait_for_services; then
        show_status
        exit 0
    else
        log_error "服务启动失败，请检查日志"
        docker compose -f docker-compose.kpl.yml logs --tail=50
        exit 1
    fi
}

# 如果直接运行此脚本
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
    main "$@"
fi

