<?php

echo "=== IBIZA CEA - Script de Instalación Docker ===\n\n";

// Función para crear archivo .env interactivo
function createEnvFile() {
    echo "Configuración de variables de entorno:\n\n";
    
    // Entorno
    $appEnv = readline("Entorno (local/production) [local]: ");
    $appEnv = empty($appEnv) ? 'local' : $appEnv;
    
    // URL del sitio
    $siteUrl = readline("URL del sitio (ej: http://localhost/ibiza) [http://localhost]: ");
    $siteUrl = empty($siteUrl) ? 'http://localhost' : $siteUrl;
    
    // Configuración de base de datos
    echo "\n--- Configuración de Base de Datos ---\n";
    $dbHost = readline("Host de la base de datos [localhost]: ");
    $dbHost = empty($dbHost) ? 'localhost' : $dbHost;
    
    $dbPort = readline("Puerto de la base de datos [3306]: ");
    $dbPort = empty($dbPort) ? '3306' : $dbPort;
    
    $dbUser = readline("Usuario de la base de datos [root]: ");
    $dbUser = empty($dbUser) ? 'root' : $dbUser;
    
    $dbPass = readline("Contraseña de la base de datos: ");
    
    $dbName = readline("Nombre de la base de datos [ibiza_db]: ");
    $dbName = empty($dbName) ? 'ibiza_db' : $dbName;
    
    // JWT Secret
    $jwtSecret = readline("JWT Secret (presione Enter para generar automático): ");
    if (empty($jwtSecret)) {
        $jwtSecret = 'ibiza_jwt_' . bin2hex(random_bytes(16)) . '_' . date('Y');
    }
    
    // Crear archivo .env
    $envContent = "# Entorno de aplicación\n";
    $envContent .= "APP_ENV=$appEnv\n";
    $envContent .= "SITE_URL=$siteUrl\n\n";
    $envContent .= "# Base de datos local/desarrollo\n";
    $envContent .= "LOCAL_DB_HOST=$dbHost\n";
    $envContent .= "LOCAL_DB_PORT=$dbPort\n";
    $envContent .= "LOCAL_DB_USER=$dbUser\n";
    $envContent .= "LOCAL_DB_PASS=$dbPass\n";
    $envContent .= "LOCAL_DB_NAME=$dbName\n\n";
    $envContent .= "# Base de datos de producción\n";
    $envContent .= "SERVER_DB_HOST=$dbHost\n";
    $envContent .= "SERVER_DB_PORT=$dbPort\n";
    $envContent .= "SERVER_DB_USER=$dbUser\n";
    $envContent .= "SERVER_DB_PASS=$dbPass\n";
    $envContent .= "SERVER_DB_NAME=$dbName\n\n";
    $envContent .= "# Configuración de sesión\n";
    $envContent .= "SESSION_TIMEOUT=28800\n";
    $envContent .= "JWT_SECRET=$jwtSecret\n";
    $envContent .= "JWT_EXPIRATION=86400\n";
    
    file_put_contents(__DIR__ . '/.env', $envContent);
    echo "\n✓ Archivo .env creado exitosamente\n\n";
}

// Verificar si existe .env
$configFile = __DIR__ . '/.env';
if (!file_exists($configFile) || empty(file_get_contents($configFile))) {
    echo "Archivo .env no encontrado o vacío.\n";
    $createEnv = readline("¿Desea crear archivo .env ahora? (s/n) [s]: ");
    if (strtolower($createEnv) !== 'n') {
        createEnvFile();
    } else {
        echo "Por favor cree el archivo .env manualmente antes de continuar.\n";
        exit(1);
    }
}

// Cargar configuración
require_once __DIR__ . '/config/config.php';

echo "Conectando a la base de datos...\n";
echo "Host: " . DB_HOST . "\n";
echo "Puerto: " . DB_PORT . "\n";
echo "Usuario: " . DB_USER . "\n";
echo "Base de datos: " . DB_NAME . "\n\n";

try {
    $dsn = "mysql:host=" . DB_HOST . ";port=" . DB_PORT . ";charset=utf8mb4";
    $pdo = new PDO($dsn, DB_USER, DB_PASS);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "✓ Conexión exitosa\n\n";
} catch (PDOException $e) {
    echo "✗ Error de conexión: " . $e->getMessage() . "\n";
    echo "\nVerifique la configuración en el archivo .env\n";
    exit(1);
}

// Verificar/crear base de datos
try {
    $pdo->exec("CREATE DATABASE IF NOT EXISTS `" . DB_NAME . "` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci");
    $pdo->exec("USE `" . DB_NAME . "`");
    echo "✓ Base de datos verificada/creada: " . DB_NAME . "\n\n";
} catch (PDOException $e) {
    echo "✗ Error al crear base de datos: " . $e->getMessage() . "\n";
    exit(1);
}

$scriptPath = __DIR__ . '/database/schema.sql';

if (!file_exists($scriptPath)) {
    echo "Error: Archivo schema.sql no encontrado en database/\n";
    exit(1);
}

echo "Ejecutando script de base de datos...\n";

try {
    $sql = file_get_contents($scriptPath);
    $pdo->exec($sql);
    echo "✓ Base de datos creada exitosamente\n\n";
} catch (PDOException $e) {
    echo "✗ Error al crear base de datos: " . $e->getMessage() . "\n";
    exit(1);
}

echo "=== Instalación Completada ===\n\n";
echo "Usuario por defecto:\n";
echo "  Usuario: admin\n";
echo "  Contraseña: admin123\n\n";
echo "Acceda al sistema en: " . SITE_URL . "/login.php\n";
echo "\nPara Docker, asegúrese de que las variables de entorno estén configuradas correctamente.\n";