@echo off
chcp 65001 > nul
setlocal enabledelayedexpansion

:: 手部检测Web服务启动脚本 (Windows版本)
:: 包含虚拟环境激活和服务启动

:: 设置脚本目录
cd /d "%~dp0"

:: 颜色定义 (Windows CMD不支持颜色，使用echo代替)
echo ================================================
echo     🤖 手部检测Web服务启动器 (Windows)
echo ================================================
echo.

:: 检查Python是否存在
python --version >nul 2>&1
if %errorlevel% neq 0 (
    echo [ERROR] Python 未找到，请先安装Python
    pause
    exit /b 1
)

for /f "tokens=*" %%i in ('python --version 2^>^&1') do set PYTHON_VERSION=%%i
echo [INFO] Python版本: %PYTHON_VERSION%

:: 检查虚拟环境是否存在
if not exist "venv" (
    echo [WARNING] 虚拟环境不存在，正在创建...
    python -m venv venv
    if %errorlevel% neq 0 (
        echo [ERROR] 虚拟环境创建失败
        pause
        exit /b 1
    )
    echo [SUCCESS] 虚拟环境创建成功
)

:: 激活虚拟环境
echo [INFO] 正在激活虚拟环境...
call venv\Scripts\activate.bat
if %errorlevel% neq 0 (
    echo [ERROR] 虚拟环境激活失败
    pause
    exit /b 1
)
echo [SUCCESS] 虚拟环境已激活

:: 检查依赖是否已安装
echo [INFO] 检查Python依赖...
if exist "requirements.txt" (
    python -c "import flask, flask_socketio, cv2, mediapipe" >nul 2>&1
    if %errorlevel% neq 0 (
        echo [WARNING] 依赖未完全安装，正在安装...
        pip install -r requirements.txt
        if %errorlevel% neq 0 (
            echo [ERROR] 依赖安装失败
            pause
            exit /b 1
        )
        echo [SUCCESS] 依赖安装成功
    ) else (
        echo [SUCCESS] 依赖已安装
    )
) else (
    echo [ERROR] requirements.txt 文件不存在
    pause
    exit /b 1
)

:: 检查必要文件是否存在
echo [INFO] 检查必要文件...
set "files=run_web_service.py src\web_server.py src\hand_detection_3d.py templates\index.html"
for %%f in (%files%) do (
    if not exist "%%f" (
        echo [ERROR] 缺少必要文件: %%f
        pause
        exit /b 1
    )
)
echo [SUCCESS] 所有必要文件存在

:: 解析命令行参数
set HOST=0.0.0.0
set PORT=5000
set DEBUG=
set TEST_VIDEO=

:parse_args
if "%~1"=="" goto :end_parse
if "%~1"=="--host" (
    set HOST=%~2
    shift
    shift
    goto :parse_args
)
if "%~1"=="--port" (
    set PORT=%~2
    shift
    shift
    goto :parse_args
)
if "%~1"=="--debug" (
    set DEBUG=--debug
    shift
    goto :parse_args
)
if "%~1"=="--test-video" (
    set TEST_VIDEO=--test-video %~2
    shift
    shift
    goto :parse_args
)
if "%~1"=="-h" goto :show_help
if "%~1"=="--help" goto :show_help
if "%~1"=="/?" goto :show_help

echo [ERROR] 未知参数: %~1
echo 使用 %~nx0 --help 查看帮助
pause
exit /b 1

:show_help
echo 用法: %~nx0 [选项]
echo.
echo 选项:
echo   --host HOST          服务器地址 (默认: 0.0.0.0)
echo   --port PORT          端口号 (默认: 5000)
echo   --debug              启用调试模式
echo   --test-video VIDEO   使用本地测试视频
echo   -h, --help, /?       显示帮助信息
echo.
echo 示例:
echo   %~nx0                                    # 基本启动
echo   %~nx0 --host localhost --port 8080      # 自定义地址和端口
echo   %~nx0 --debug                            # 调试模式
echo   %~nx0 --test-video data\videos\test.mp4  # 本地视频测试
pause
exit /b 0

:end_parse

:: 显示启动信息
echo.
echo [INFO] 启动配置:
echo   - 服务器地址: %HOST%
echo   - 端口号: %PORT%
if not "%DEBUG%"=="" (
    echo   - 调试模式: 启用
)
if not "%TEST_VIDEO%"=="" (
    echo   - 测试视频: %TEST_VIDEO:~13%
)
echo.

:: 显示访问地址
if "%HOST%"=="0.0.0.0" (
    echo [INFO] 服务启动后可通过以下地址访问:
    echo   - 本地访问: http://localhost:%PORT%
    for /f "tokens=2 delims=:" %%i in ('ipconfig ^| findstr "IPv4"') do (
        set IP=%%i
        set IP=!IP: =!
        echo   - 局域网访问: http://!IP!:%PORT%
        goto :continue
    )
    :continue
) else (
    echo [INFO] 服务启动后访问地址: http://%HOST%:%PORT%
)

echo.
echo [INFO] 按 Ctrl+C 停止服务
echo ================================================
echo.

:: 启动服务
echo [INFO] 正在启动手部检测Web服务...
python run_web_service.py --host %HOST% --port %PORT% %DEBUG% %TEST_VIDEO%

pause