@echo off
REM ====================================
REM SCRIPT DE CONFIGURACIÓN DE ENTORNO
REM Balotario Licencia A-I (Windows)
REM =============================

setlocal enabledelayedexpansion

REM Función para generar SECRET_KEY
:generate_secret_key
python -c "import secrets; print(secrets.token_hex(32))" 2>nul
if errorlevel 1 (
    REM Fallback si Python no está disponible
    echo %RANDOM%%RANDOM%%RANDOM%%RANDOM%
)
goto :eof

REM Función para mostrar header
:print_header
echo ======================================
echo 🌍 CONFIGURACIÓN DE ENTORNO
echo Balotario Licencia A-I
echo ======================================
echo.
goto :eof

REM Función para configurar desarrollo
:setup_development
echo ℹ️  Configurando entorno de desarrollo...

REM Generar SECRET_KEY
for /f %%i in ('python -c "import secrets; print(secrets.token_hex(32))" 2^>nul') do set SECRET_KEY=%%i
if "!SECRET_KEY!"=="" set SECRET_KEY=%RANDOM%%RANDOM%%RANDOM%%RANDOM%

REM Crear archivo .env
(
echo # ====================================
echo # CONFIGURACIÓN DE DESARROLLO
echo # Generado automáticamente: %date% %time%
echo # ====================================
echo.
echo # Configuración de Flask
echo SECRET_KEY=!SECRET_KEY!
echo FLASK_ENV=development
echo FLASK_CONFIG=development
echo FLASK_DEBUG=true
echo.
echo # Configuración del servidor
echo HOST=127.0.0.1
echo PORT=5000
echo.
echo # Configuración de Docker
echo DOCKER_CONTAINER=false
echo.
echo # Configuración de logging
echo LOG_LEVEL=DEBUG
echo AUTO_RELOAD=true
echo SHOW_DEBUG_TOOLBAR=false
echo.
echo # ====================================
echo # NOTAS:
echo # - Cambia SECRET_KEY antes de ir a producción
echo # - Revisa .env.sample para más opciones
echo # ====================================
) > .env

echo ✅ Configuración de desarrollo creada en .env
goto :eof

REM Función para configurar producción
:setup_production
echo ℹ️  Configurando entorno de producción...

REM Generar SECRET_KEY
for /f %%i in ('python -c "import secrets; print(secrets.token_hex(32))" 2^>nul') do set SECRET_KEY=%%i
if "!SECRET_KEY!"=="" set SECRET_KEY=%RANDOM%%RANDOM%%RANDOM%%RANDOM%

REM Crear archivo .env
(
echo # ====================================
echo # CONFIGURACIÓN DE PRODUCCIÓN
echo # Generado automáticamente: %date% %time%
echo # ====================================
echo.
echo # Configuración de Flask
echo SECRET_KEY=!SECRET_KEY!
echo FLASK_ENV=production
echo FLASK_CONFIG=production
echo FLASK_DEBUG=false
echo.
echo # Configuración del servidor
echo HOST=0.0.0.0
echo PORT=5000
echo.
echo # Configuración de Docker
echo DOCKER_CONTAINER=true
echo.
echo # Configuración de logging
echo LOG_LEVEL=INFO
echo.
echo # ====================================
echo # IMPORTANTE:
echo # - Guarda SECRET_KEY en lugar seguro
echo # - Revisa todas las configuraciones antes de desplegar
echo # ====================================
) > .env

echo ✅ Configuración de producción creada en .env
echo ⚠️  IMPORTANTE: Guarda la SECRET_KEY en un lugar seguro
goto :eof

REM Función para configurar Docker
:setup_docker
echo ℹ️  Configurando entorno para Docker...

REM Generar SECRET_KEY
for /f %%i in ('python -c "import secrets; print(secrets.token_hex(32))" 2^>nul') do set SECRET_KEY=%%i
if "!SECRET_KEY!"=="" set SECRET_KEY=%RANDOM%%RANDOM%%RANDOM%%RANDOM%

REM Crear archivo .env
(
echo # ====================================
echo # CONFIGURACIÓN PARA DOCKER
echo # Generado automáticamente: %date% %time%
echo # ====================================
echo.
echo # Configuración de Flask
echo SECRET_KEY=!SECRET_KEY!
echo FLASK_ENV=production
echo FLASK_CONFIG=production
echo FLASK_DEBUG=false
echo.
echo # Configuración del servidor
echo HOST=0.0.0.0
echo PORT=5000
echo.
echo # Configuración de Docker
echo DOCKER_CONTAINER=true
echo.
echo # Configuración de logging
echo LOG_LEVEL=INFO
echo.
echo # ====================================
echo # DOCKER NOTES:
echo # - Estas variables pueden ser sobrescritas en docker-compose.yml
echo # - Para desarrollo con Docker, cambia FLASK_ENV=development
echo # ====================================
) > .env

echo ✅ Configuración para Docker creada en .env
goto :eof

REM Función para validar configuración
:validate_env
echo ℹ️  Validando configuración...

if not exist ".env" (
    echo ❌ Archivo .env no encontrado
    exit /b 1
)

findstr /C:"SECRET_KEY=" .env >nul
if errorlevel 1 (
    echo ❌ SECRET_KEY no encontrada en .env
    exit /b 1
)

findstr /C:"FLASK_ENV=" .env >nul
if errorlevel 1 (
    echo ❌ FLASK_ENV no encontrada en .env
    exit /b 1
)

echo ✅ Configuración válida
echo.
echo ℹ️  Resumen de configuración:
echo ------------------------
for /f "tokens=1,2 delims==" %%a in ('findstr /R "^SECRET_KEY= ^FLASK_ENV= ^FLASK_DEBUG= ^HOST= ^PORT=" .env') do (
    if "%%a"=="SECRET_KEY" (
        echo   %%a=***OCULTA***
    ) else (
        echo   %%a=%%b
    )
)
goto :eof

REM Función para mostrar ayuda
:show_help
echo Uso: %~nx0 [COMANDO]
echo.
echo Comandos disponibles:
echo   dev        Configurar para desarrollo local
echo   prod       Configurar para producción
echo   docker     Configurar para Docker
echo   validate   Validar configuración actual
echo   backup     Crear backup de .env actual
echo   restore    Restaurar desde .env.sample
echo   help       Mostrar esta ayuda
echo.
echo Ejemplos:
echo   %~nx0 dev      # Configuración de desarrollo
echo   %~nx0 prod     # Configuración de producción
echo   %~nx0 docker   # Configuración para Docker
goto :eof

REM Función para crear backup
:backup_env
if exist ".env" (
    set backup_file=.env.backup.%date:~-4%%date:~3,2%%date:~0,2%_%time:~0,2%%time:~3,2%%time:~6,2%
    set backup_file=!backup_file: =0!
    copy .env "!backup_file!" >nul
    echo ✅ Backup creado: !backup_file!
) else (
    echo ⚠️  No hay archivo .env para respaldar
)
goto :eof

REM Función para restaurar desde sample
:restore_env
if exist ".env.sample" (
    copy .env.sample .env >nul
    echo ✅ Configuración restaurada desde .env.sample
    echo ⚠️  Recuerda personalizar los valores en .env
) else (
    echo ❌ Archivo .env.sample no encontrado
    exit /b 1
)
goto :eof

REM Función principal
:main
call :print_header

if "%1"=="" goto help
if "%1"=="dev" goto dev
if "%1"=="development" goto dev
if "%1"=="prod" goto prod
if "%1"=="production" goto prod
if "%1"=="docker" goto docker
if "%1"=="validate" goto validate
if "%1"=="check" goto validate
if "%1"=="backup" goto backup
if "%1"=="restore" goto restore
if "%1"=="help" goto help
if "%1"=="--help" goto help
if "%1"=="-h" goto help

echo ❌ Comando desconocido: %1
echo.
goto help

:dev
call :backup_env
call :setup_development
call :validate_env
goto end

:prod
call :backup_env
call :setup_production
call :validate_env
goto end

:docker
call :backup_env
call :setup_docker
call :validate_env
goto end

:validate
call :validate_env
goto end

:backup
call :backup_env
goto end

:restore
call :backup_env
call :restore_env
goto end

:help
call :show_help
goto end

:end
pause
