<?php

/**
 * Configuración de base de datos con detección automática de entorno
 * GGEE - Sistema de Gestión Educacional
 */

// Detectar entorno automáticamente
$is_development = (
    (isset($_SERVER['SERVER_NAME']) && strpos($_SERVER['SERVER_NAME'], 'localhost') !== false) ||
    (isset($_SERVER['SERVER_NAME']) && strpos($_SERVER['SERVER_NAME'], '127.0.0.1') !== false) ||
    (isset($_SERVER['HTTP_HOST']) && strpos($_SERVER['HTTP_HOST'], 'localhost') !== false) ||
    (!isset($_SERVER['SERVER_NAME']) && !isset($_SERVER['HTTP_HOST'])) // CLI mode = development
);

if ($is_development) {
    // Configuración para desarrollo (XAMPP)
    $host = 'localhost';
    $port = '3306';
    $db   = 'matricula_local';
    $user = 'root';
    $pass = '';
    $charset = 'utf8mb4';

    $options = [
        PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        PDO::ATTR_EMULATE_PREPARES   => false,
    ];

    // Intenta conectar primero por socket (común en XAMPP), si falla, usa el host y puerto estándar.
    try {
        $pdo = new PDO("mysql:unix_socket=/opt/lampp/var/mysql/mysql.sock;dbname=$db;charset=$charset", $user, $pass, $options);
    } catch (PDOException $e) {
        // Si el socket falla, intenta la conexión estándar de localhost.
        try {
            $pdo = new PDO("mysql:host=$host;port=$port;dbname=$db;charset=$charset", $user, $pass, $options);
        } catch (PDOException $e_std) {
            throw new PDOException("Error de conexión DB local: " . $e_std->getMessage(), (int)$e_std->getCode());
        }
    }
} else {
    // Configuración para producción (cPanel)
    $host = 'srv21.cpanelhost.cl';
    $port = '3306';
    $db   = 'cwm111145_matricula';
    $user = 'cwm111145_admin_patoR_GGEE';
    $pass = 'nTU0pYW9!uy)';
    $charset = 'utf8mb4';

    $options = [
        PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        PDO::ATTR_EMULATE_PREPARES   => false,
        PDO::ATTR_PERSISTENT         => true, // Para mejor rendimiento en producción
    ];

    try {
        $pdo = new PDO("mysql:host=$host;port=$port;dbname=$db;charset=$charset", $user, $pass, $options);
    } catch (PDOException $e) {
        // En producción, log el error pero no mostrar detalles
        error_log("Error de conexión DB: " . $e->getMessage());
        throw new PDOException("Error de conexión a la base de datos", (int)$e->getCode());
    }
}
