#!/bin/bash
# YG_FT_Base 统一启动脚本
# 同时启动后端 API 服务和 Web 静态服务器
# 使用方法: bash start_all.sh

# 自动修复脚本换行符
if grep -q $'\r' "$0"; then
    echo "检测到 Windows 换行符，自动修复中..."
    sed -i 's/\r$//' "$0"
    echo "修复完成，重新执行脚本..."
    exec "$0"
fi

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR"

echo "===================================="
echo "YG_FT_Base 统一启动脚本"
echo "===================================="
echo ""

# 读取配置
CONFIG_FILE="$SCRIPT_DIR/config.yaml"
if [ -f "$CONFIG_FILE" ]; then
    API_PORT=$(python3 -c "import yaml; print(yaml.safe_load(open('$CONFIG_FILE'))['app'].get('port', 7861))" 2>/dev/null)
    WEB_PORT=$(python3 -c "import yaml; print(yaml.safe_load(open('$CONFIG_FILE'))['app'].get('web_port', 7862))" 2>/dev/null)
    [ -z "$API_PORT" ] && API_PORT=7861
    [ -z "$WEB_PORT" ] && WEB_PORT=7862
else
    API_PORT=7861
    WEB_PORT=7862
fi

echo "📦 端口配置:"
echo "   - 后端 API: $API_PORT"
echo "   - Web 服务器: $WEB_PORT"
echo ""

# 检查端口是否已被占用
check_port() {
    if lsof -i:$1 &> /dev/null || netstat -tuln | grep -q ":$1 " 2>/dev/null; then
        return 1
    fi
    return 0
}

# 启动后端 API 服务
start_api() {
    echo "🚀 启动后端 API 服务..."
    if [ -f "requirements.txt" ]; then
        if [ -d "B_venv" ]; then
            source B_venv/bin/activate
        else
            echo "⚠️  虚拟环境不存在，请先运行 create_venv.sh 创建"
            return 1
        fi
    fi

    # 检查端口
    if ! check_port $API_PORT; then
        echo "❌ 端口 $API_PORT 已被占用，后端服务可能已在运行"
        return 1
    fi

    python src/main.py &
    API_PID=$!
    echo "✅ 后端服务已启动 (PID: $API_PID, 端口: $API_PORT)"
    echo "$API_PID" > /tmp/ygft_api.pid
}

# 启动 Web 静态服务器
start_web() {
    echo ""
    echo "🚀 启动 Web 静态服务器..."
    cd "$SCRIPT_DIR/web"

    # 检查端口
    if ! check_port $WEB_PORT; then
        echo "⚠️  端口 $WEB_PORT 已被占用，Web 服务可能已在运行"
        return 1
    fi

    python3 -m http.server $WEB_PORT &
    WEB_PID=$!
    echo "✅ Web 服务已启动 (PID: $WEB_PID, 端口: $WEB_PORT)"
    echo "$WEB_PID" > /tmp/ygft_web.pid
}

# 停止服务
stop_all() {
    echo ""
    echo "🛑 停止所有服务..."

    if [ -f /tmp/ygft_api.pid ]; then
        kill $(cat /tmp/ygft_api.pid) 2>/dev/null
        rm /tmp/ygft_api.pid
        echo "✅ 后端服务已停止"
    fi

    if [ -f /tmp/ygft_web.pid ]; then
        kill $(cat /tmp/ygft_web.pid) 2>/dev/null
        rm /tmp/ygft_web.pid
        echo "✅ Web 服务已停止"
    fi

    # 清理可能残留的进程
    pkill -f "src/main.py" 2>/dev/null
    pkill -f "http.server $WEB_PORT" 2>/dev/null
}

# 显示状态
status() {
    echo ""
    echo "📊 服务状态:"
    echo ""

    if [ -f /tmp/ygft_api.pid ] && kill -0 $(cat /tmp/ygft_api.pid) 2>/dev/null; then
        echo "✅ 后端 API: 运行中 (PID: $(cat /tmp/ygft_api.pid), 端口: $API_PORT)"
    else
        echo "❌ 后端 API: 未运行"
    fi

    if [ -f /tmp/ygft_web.pid ] && kill -0 $(cat /tmp/ygft_web.pid) 2>/dev/null; then
        echo "✅ Web 服务: 运行中 (PID: $(cat /tmp/ygft_web.pid), 端口: $WEB_PORT)"
    else
        echo "❌ Web 服务: 未运行"
    fi

    echo ""
    echo "🌐 访问地址:"
    echo "   - 后端 API: http://localhost:$API_PORT"
    echo "   - Web 页面: http://localhost:$WEB_PORT/pages/main.html"
}

# 主菜单
case "$1" in
    start)
        start_api
        start_web
        echo ""
        echo "===================================="
        echo "所有服务已启动！"
        echo "===================================="
        status
        ;;
    stop)
        stop_all
        echo "✅ 所有服务已停止"
        ;;
    restart)
        stop_all
        sleep 1
        start_api
        start_web
        echo ""
        echo "===================================="
        echo "所有服务已重启！"
        echo "===================================="
        status
        ;;
    status)
        status
        ;;
    *)
        echo "用法: $0 {start|stop|restart|status}"
        echo ""
        echo "命令:"
        echo "   start   - 启动所有服务"
        echo "   stop    - 停止所有服务"
        echo "   restart - 重启所有服务"
        echo "   status  - 查看服务状态"
        exit 1
        ;;
esac
