@echo off
REM ================================================================================
REM Mall SQL 自动部署脚本 (Windows)
REM ================================================================================
REM 用途：自动执行商城数据库脚本
REM 使用：deploy.bat [选项]
REM
REM 选项：
REM   --full          完整部署（删除重建）
REM   --upgrade       增量升级
REM   --check         仅检查数据库状态
REM   --test          创建测试数据
REM   --help          显示帮助
REM ================================================================================

setlocal enabledelayedexpansion

REM 默认配置
if "%DB_HOST%"=="" set DB_HOST=localhost
if "%DB_PORT%"=="" set DB_PORT=5432
if "%DB_NAME%"=="" set DB_NAME=akmon
if "%DB_USER%"=="" set DB_USER=postgres

set SCHEMA_DIR=schemas
set MIGRATION_DIR=migrations
set TEST_DIR=tests
set SUBSCRIPTION_DIR=subscription

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

echo ==========================================
echo      Mall SQL 自动部署脚本
echo ==========================================
echo 数据库: %DB_USER%@%DB_HOST%:%DB_PORT%/%DB_NAME%
echo ==========================================
echo.

REM 检查连接
echo [INFO] 检查数据库连接...
psql -h %DB_HOST% -p %DB_PORT% -U %DB_USER% -d %DB_NAME% -c "\q" >nul 2>&1
if errorlevel 1 (
    echo [ERROR] 无法连接到数据库
    echo 请检查环境变量或连接信息
    goto :end
)
echo [SUCCESS] 数据库连接成功
echo.

REM 解析参数
if "%1"=="--full" goto :deploy_full
if "%1"=="--upgrade" goto :deploy_upgrade
if "%1"=="--check" goto :check_database
if "%1"=="--test" goto :create_test_data
if "%1"=="--subscription" goto :deploy_subscription

echo [ERROR] 未知选项: %1%
echo.
goto :show_help

:deploy_full
echo ==========================================
echo [WARNING] 完整部署将重建所有商城表！
echo ==========================================
set /p confirm="确认继续? (yes/no): "
if /i not "%confirm%"=="yes" (
    echo [INFO] 已取消
    goto :end
)

echo [INFO] 开始完整部署...

echo [INFO] 执行: 创建商城核心表...
psql -h %DB_HOST% -p %DB_PORT% -U %DB_USER% -d %DB_NAME% -f %SCHEMA_DIR%\complete_mall_database.sql
if errorlevel 1 goto :error

echo [INFO] 执行: 创建商品补充表...
psql -h %DB_HOST% -p %DB_PORT% -U %DB_USER% -d %DB_NAME% -f %SCHEMA_DIR%\product_database.sql
if errorlevel 1 goto :error

echo [INFO] 执行: 配置SEO和安全策略...
psql -h %DB_HOST% -p %DB_PORT% -U %DB_USER% -d %DB_NAME% -f %SCHEMA_DIR%\mall_seo_security.sql
if errorlevel 1 goto :error

echo [INFO] 执行: 创建订阅表...
psql -h %DB_HOST% -p %DB_PORT% -U %DB_USER% -d %DB_NAME% -f %SUBSCRIPTION_DIR%\create_mall_subscription_tables.sql
if errorlevel 1 goto :error

echo [INFO] 执行: 创建订阅触发器...
psql -h %DB_HOST% -p %DB_PORT% -U %DB_USER% -d %DB_NAME% -f %SUBSCRIPTION_DIR%\subscription_guard_trigger.sql
if errorlevel 1 goto :error

echo [INFO] 执行: 创建订阅RLS策略...
psql -h %DB_HOST% -p %DB_PORT% -U %DB_USER% -d %DB_NAME% -f %SUBSCRIPTION_DIR%\subscription_rls_policies.sql
if errorlevel 1 goto :error

echo.
echo [SUCCESS] 完整部署完成！
echo [INFO] 接下来可以运行: deploy.bat --test
goto :end

:deploy_upgrade
echo [INFO] 开始增量升级...

echo [INFO] 执行: 数据库状态检查...
psql -h %DB_HOST% -p %DB_PORT% -U %DB_USER% -d %DB_NAME% -f %TEST_DIR%\mall_database_check.sql
if errorlevel 1 goto :error

echo [INFO] 执行: 增量升级...
psql -h %DB_HOST% -p %DB_PORT% -U %DB_USER% -d %DB_NAME% -f %MIGRATION_DIR%\mall_alter_upgrade.sql
if errorlevel 1 goto :error

echo [INFO] 执行: 数据完整性验证...
psql -h %DB_HOST% -p %DB_PORT% -U %DB_USER% -d %DB_NAME% -f %TEST_DIR%\validation_test.sql
if errorlevel 1 goto :error

echo.
echo [SUCCESS] 增量升级完成！
goto :end

:check_database
echo [INFO] 检查数据库状态...
psql -h %DB_HOST% -p %DB_PORT% -U %DB_USER% -d %DB_NAME% -f %TEST_DIR%\mall_database_check.sql
if errorlevel 1 goto :error
echo [SUCCESS] 检查完成
goto :end

:create_test_data
echo [INFO] 创建测试数据...

echo [INFO] 执行: 创建测试用户...
psql -h %DB_HOST% -p %DB_PORT% -U %DB_USER% -d %DB_NAME% -f %TEST_DIR%\create_supabase_auth_users.sql
if errorlevel 1 goto :error

echo [INFO] 执行: 创建模拟数据...
psql -h %DB_HOST% -p %DB_PORT% -U %DB_USER% -d %DB_NAME% -f %TEST_DIR%\mock_data_insert.sql
if errorlevel 1 goto :error

echo [INFO] 执行: 验证测试数据...
psql -h %DB_HOST% -p %DB_PORT% -U %DB_USER% -d %DB_NAME% -f %TEST_DIR%\verify_mock_data_fix.sql
if errorlevel 1 goto :error

echo.
echo [SUCCESS] 测试数据创建完成！
goto :end

:deploy_subscription
echo [INFO] 部署订阅系统...

psql -h %DB_HOST% -p %DB_PORT% -U %DB_USER% -d %DB_NAME% -f %SUBSCRIPTION_DIR%\create_mall_subscription_tables.sql
if errorlevel 1 goto :error

psql -h %DB_HOST% -p %DB_PORT% -U %DB_USER% -d %DB_NAME% -f %SUBSCRIPTION_DIR%\subscription_guard_trigger.sql
if errorlevel 1 goto :error

psql -h %DB_HOST% -p %DB_PORT% -U %DB_USER% -d %DB_NAME% -f %SUBSCRIPTION_DIR%\subscription_rls_policies.sql
if errorlevel 1 goto :error

echo [SUCCESS] 订阅系统部署完成！
goto :end

:show_help
echo Mall SQL 自动部署脚本 (Windows)
echo.
echo 用法: deploy.bat [选项]
echo.
echo 选项:
echo   --full          完整部署（删除重建）
echo   --upgrade       增量升级（保留现有数据）
echo   --check         检查数据库状态
echo   --test          创建测试数据
echo   --subscription  部署订阅系统
echo   --help          显示此帮助信息
echo.
echo 环境变量:
echo   DB_HOST         数据库主机 (默认: localhost)
echo   DB_PORT         数据库端口 (默认: 5432)
echo   DB_NAME         数据库名称 (默认: akmon)
echo   DB_USER         数据库用户 (默认: postgres)
echo.
echo 示例:
echo   完整部署
echo     deploy.bat --full
echo.
echo   增量升级
echo     deploy.bat --upgrade
echo.
echo   使用自定义数据库
echo     set DB_HOST=prod.example.com
echo     set DB_NAME=akmon_prod
echo     deploy.bat --upgrade
goto :end

:error
echo.
echo [ERROR] 部署失败！请检查错误信息。
exit /b 1

:end
endlocal
