@echo off
REM UVM 开发环境启动脚本 (Windows)
REM 这个脚本提供了一个简便的方式来在开发环境中运行和测试 UVM 工具。

setlocal enabledelayedexpansion

REM 检查 Python 是否可用
python --version >nul 2>&1
if errorlevel 1 (
    echo ❌ 错误: Python 未安装或不在 PATH 中
    exit /b 1
)

REM 显示帮助信息
if "%1"=="" goto :show_help
if "%1"=="help" goto :show_help
if "%1"--help" goto :show_help

REM 处理命令
if "%1"=="setup" goto :setup_dev
if "%1"=="run" goto :run_uvm
if "%1"=="test" goto :run_tests
if "%1"=="lint" goto :run_lint
if "%1"=="check" goto :run_all_checks

REM 未知命令
echo ❌ 错误: 未知命令 '%1'
goto :show_help

:show_help
echo.
echo UVM 开发环境启动脚本
echo.
echo 用法:
echo   dev.bat setup                    # 设置开发环境
echo   dev.bat run list                 # 运行 'uvm list'
echo   dev.bat run use tsinghua         # 运行 'uvm use tsinghua'
echo   dev.bat test                     # 运行所有测试
echo   dev.bat test tests/unit/         # 运行特定测试
echo   dev.bat lint                     # 运行代码检查
echo   dev.bat check                    # 运行所有检查
echo.
goto :end

:setup_dev
echo.
echo 🛠️  设置开发环境...
echo.

REM 检查是否在项目根目录
if not exist "pyproject.toml" (
    echo ❌ 错误: 请在项目根目录运行此脚本
    exit /b 1
)

REM 安装开发依赖
echo 📦 安装开发依赖...
python -m pip install -e ".[dev]"
if errorlevel 1 (
    echo ❌ 安装开发依赖失败
    exit /b 1
)

REM 安装 pre-commit hooks
echo 🔧 安装 pre-commit hooks...
python -m pre-commit install
if errorlevel 1 (
    echo ⚠️  pre-commit hooks 安装失败，但不影响正常使用
)

echo.
echo ✅ 开发环境设置完成!
goto :end

:run_uvm
if "%2"=="" (
    echo ❌ 错误: 请提供要运行的 UVM 命令
    goto :show_help
)

echo.
echo 🚀 运行 UVM: %*
echo.

python -m uvm %*
goto :end

:run_tests
echo.
echo 🧪 运行测试...
echo.

if "%2"=="" (
    python -m pytest --cov=uvm --cov-report=term-missing
) else (
    python -m pytest --cov=uvm --cov-report=term-missing %*
)
goto :end

:run_lint
echo.
echo 🔍 运行代码检查...
echo.

REM 运行 ruff 检查
echo 📝 Ruff 代码检查...
python -m ruff check --fix .
if errorlevel 1 (
    echo ⚠️  Ruff 检查发现问题
)

REM 运行 ruff 格式化
echo 🎨 Ruff 代码格式化...
python -m ruff format .

REM 运行 mypy 类型检查
echo 🔎 MyPy 类型检查...
python -m mypy uvm/
if errorlevel 1 (
    echo ⚠️  MyPy 检查发现问题
)

echo.
echo ✅ 代码检查完成!
goto :end

:run_all_checks
echo.
echo 🔍 运行所有代码质量检查...
echo.

REM 运行代码检查
call :run_lint
if errorlevel 1 set lint_failed=1

REM 运行测试
echo.
echo 🧪 运行测试覆盖率检查...
python -m pytest --cov=uvm --cov-report=term-missing --cov-fail-under=90
if errorlevel 1 set test_failed=1

REM 检查结果
if defined lint_failed (
    if defined test_failed (
        echo.
        echo 💥 代码检查和测试都失败!
        exit /b 1
    ) else (
        echo.
        echo ⚠️  代码检查失败，但测试通过!
        exit /b 1
    )
) else (
    if defined test_failed (
        echo.
        echo ⚠️  代码检查通过，但测试失败!
        exit /b 1
    ) else (
        echo.
        echo 🎉 所有检查通过!
    )
)
goto :end

:end
endlocal