@echo off
setlocal enabledelayedexpansion
chcp 65001 >nul
title INSTALADOR CIEN BRAZOS - @LACASADELTRUCO

echo.
echo  [31m██████╗[0m[37m██╗[0m[31m███████╗[0m[37m███╗   ██╗[0m[31m██████╗[0m [37m██████╗[0m  [31m█████╗[0m [37m███████╗[0m [31m██████╗[0m  [37m██████╗[0m
echo [31m██╔════╝[0m[37m██║[0m[31m██╔════╝[0m[37m████╗  ██║[0m[31m██╔══██╗[0m[37m██╔══██╗[0m[31m██╔══██╗[0m╚══███╔╝[0m[31m██╔═══██╗[0m[37m██╔════╝[0m
echo [31m██║     [0m[37m██║[0m[31m█████╗  [0m[37m██╔██╗ ██║[0m[31m██████╔╝[0m[37m██████╔╝[0m[31m███████║[0m  ███╔╝ [0m[31m██║   ██║[0m╚█████╗[0m
echo [31m██║     [0m[37m██║[0m[31m██╔══╝  [0m[37m██║╚██╗██║[0m[31m██╔══██╗[0m[37m██╔══██╗[0m[31m██╔══██║[0m ███╔╝  [0m[31m██║   ██║[0m ╚═══██╗[0m
echo [31m╚██████╗[0m[37m██║[0m[31m███████╗[0m[37m██║ ╚████║[0m[31m██████╔╝[0m[37m██║  ██║[0m[31m██║  ██║[0m███████╗[0m╚██████╔╝[0m[37m██████╔╝[0m
echo  [31m╚═════╝[0m[37m╚═╝[0m[31m╚══════╝[0m[37m╚═╝  ╚═══╝[0m[31m╚═════╝ [0m[37m╚═╝  ╚═╝[0m[31m╚═╝  ╚═╝[0m╚══════╝[0m ╚═════╝ [0m╚═════╝ [0m
echo.
echo [33m═════════════════════════════════════════════════════════════════════════════════[0m
echo                   [36mINSTALADOR AUTO-ESTABLE DE UN SOLO CLICK - WINDOWS[0m
echo [33m═════════════════════════════════════════════════════════════════════════════════[0m
echo.

set "VENV_DIR=%~dp0venv"
set "PYTHON_EXE="

:: 1. Verificar si ya existe el entorno virtual configurado
if exist "%VENV_DIR%\Scripts\python.exe" (
    echo [32m[INFO] Entorno virtual ya configurado. Reinstalando dependencias para asegurar estabilidad...[0m
    set "PYTHON_EXE=%VENV_DIR%\Scripts\python.exe"
    goto :install_reqs
)

:: 2. Buscar Python en la ruta del sistema
echo [36m[INFO] Buscando Python en el sistema...[0m
where python >nul 2>nul
if !errorlevel! equ 0 (
    :: Verificar que tenga soporte para venv
    python -c "import venv" >nul 2>nul
    if !errorlevel! equ 0 (
        echo [32m[INFO] Python detectado en el PATH del sistema.[0m
        set "PYTHON_EXE=python"
        goto :create_venv
    )
)

:: 3. Buscar en ubicaciones locales usuales de Windows
echo [36m[INFO] Buscando instalaciones locales de Python...[0m
set "LOCAL_PY_PATHS=%LocalAppData%\Programs\Python\Python312\python.exe %LocalAppData%\Programs\Python\Python311\python.exe %LocalAppData%\Programs\Python\Python310\python.exe"
for %%p in (%LOCAL_PY_PATHS%) do (
    if exist "%%p" (
        %%p -c "import venv" >nul 2>nul
        if !errorlevel! equ 0 (
            echo [32m[INFO] Python detectado en: %%p[0m
            set "PYTHON_EXE=%%p"
            goto :create_venv
        )
    )
)

:: 4. Si no se encuentra, descargar e instalar silenciosamente la versión oficial
echo [33m[WARNING] No se encontró ninguna instalación de Python compatible en el sistema.[0m
echo [36m[INFO] Descargando instalador oficial de Python 3.11.9 (silencioso, estable)...[0m
echo.

set "PY_INSTALLER=%temp%\python_installer.exe"
set "PY_URL=https://www.python.org/ftp/python/3.11.9/python-3.11.9-amd64.exe"

:: Descargar usando curl (incluido en Windows 10/11 por defecto)
curl -L -o "%PY_INSTALLER%" "%PY_URL%"
if !errorlevel! neq 0 (
    echo [31m[ERROR] Falló la descarga de Python. Comprueba tu conexión a Internet e inténtalo de nuevo.[0m
    pause
    exit /b 1
)

echo [36m[INFO] Instalando Python silenciosamente para el usuario actual (con pip y tcl/tk)...[0m
echo [33m[!] Por favor, espera a que termine la instalación en segundo plano (puede tardar 1-2 minutos)...[0m
"%PY_INSTALLER%" /quiet InstallAllUsers=0 PrependPath=1 Include_test=0 Include_doc=0 Include_tcltk=1 Include_pip=1
if !errorlevel! neq 0 (
    echo [31m[ERROR] Falló la instalación de Python.[0m
    del "%PY_INSTALLER%"
    pause
    exit /b 1
)
del "%PY_INSTALLER%"
echo [32m[INFO] Python instalado con éxito.[0m

:: Asignar el binario recién instalado
if exist "%LocalAppData%\Programs\Python\Python311\python.exe" (
    set "PYTHON_EXE=%LocalAppData%\Programs\Python\Python311\python.exe"
) else (
    :: Fallback a la llamada de PATH si se actualizó el environment
    set "PYTHON_EXE=python"
)

:create_venv
echo.
echo [36m[INFO] Creando entorno virtual aislado (venv)...[0m
"%PYTHON_EXE%" -m venv "%VENV_DIR%"
if !errorlevel! neq 0 (
    echo [31m[ERROR] No se pudo crear el entorno virtual venv.[0m
    pause
    exit /b 1
)

:install_reqs
echo.
echo [36m[INFO] Actualizando gestor de paquetes pip...[0m
"%VENV_DIR%\Scripts\python.exe" -m pip install --upgrade pip --no-warn-script-location

echo.
echo [36m[INFO] Instalando librerías requeridas (CustomTkinter, DnD, IMAP, SMTP, DNS, etc.)...[0m
"%VENV_DIR%\Scripts\pip.exe" install -r "%~dp0requirements.txt" --no-warn-script-location
if !errorlevel! neq 0 (
    echo.
    echo [31m[ERROR] Hubo un problema al instalar las dependencias.[0m
    pause
    exit /b 1
)

echo.
echo [33m═════════════════════════════════════════════════════════════════════════════════[0m
echo                   [32m¡CIEN BRAZOS ESTÁ INSTALADO Y TOTALMENTE ESTABLE![0m
echo [33m═════════════════════════════════════════════════════════════════════════════════[0m
echo.
echo Ya puedes iniciar el programa usando los siguientes lanzadores:
echo   - [36mCIEN_BRAZOS.bat[0m (Interfaz gráfica moderna CustomTkinter con drag ^& drop)
echo   - [36mCIEN_BRAZOS_METAL.bat[0m (Interfaz gráfica clásica de alto rendimiento)
echo   - [36mSMTP_CHECKER.bat[0m (Herramienta CLI de verificación SMTP masiva)
echo.
pause
exit /b 0
