@echo off
setlocal enabledelayedexpansion
chcp 65001 >nul
title INSTALADOR D-D MAILER - @LACASADELTRUCO

echo.
echo   [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 [37m██╔══██╗ [0m
echo   [31m██║  ██║ [0m [37m█████╗ [0m [31m██║  ██║ [0m  [37m██╔████╔██║ [0m [31m███████║ [0m [37m██║ [0m [31m██║ [0m     [37m█████╗   [0m [31m██████╔╝ [0m
echo   [31m██║  ██║ [0m [37m╚════╝ [0m [31m██║  ██║ [0m  [37m██║╚██╔╝██║ [0m [31m██╔══██║ [0m [37m██║ [0m [31m██║ [0m     [37m██╔══╝   [0m [31m██╔══██╗ [0m
echo   [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 [37m╚═╝  ╚═╝ [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.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 (
    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, Pillow, 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¡D-D MAILER ESTÁ INSTALADO Y TOTALMENTE ESTABLE! [0m
echo  [33m═════════════════════════════════════════════════════════════════════════════════ [0m
echo.
echo Ya puedes iniciar el programa usando el siguiente lanzador:
echo   -  [36mDIRTY_DARK.bat [0m (Interfaz gráfica premium CustomTkinter con seguridad HWID)
echo.
pause
exit /b 0
