<?php
// Configuración de manejo de errores
function customErrorHandler($errno, $errstr, $errfile, $errline) {
    $logFile = __DIR__ . '/../logs/php_errors.log';
    
    // Definir los tipos de error que queremos registrar
    $error_types = [
        E_ERROR => 'ERROR',
        E_WARNING => 'WARNING',
        E_PARSE => 'PARSING ERROR',
        E_NOTICE => 'NOTICE',
        E_CORE_ERROR => 'CORE ERROR',
        E_CORE_WARNING => 'CORE WARNING',
        E_COMPILE_ERROR => 'COMPILE ERROR',
        E_COMPILE_WARNING => 'COMPILE WARNING',
        E_USER_ERROR => 'USER ERROR',
        E_USER_WARNING => 'USER WARNING',
        E_USER_NOTICE => 'USER NOTICE',
        E_STRICT => 'STRICT NOTICE',
        E_RECOVERABLE_ERROR => 'RECOVERABLE ERROR',
        E_DEPRECATED => 'DEPRECATED',
        E_USER_DEPRECATED => 'USER DEPRECATED'
    ];
    
    $error_type = $error_types[$errno] ?? 'UNKNOWN';
    $error_message = "[" . date('Y-m-d H:i:s') . "] $error_type: $errstr in $errfile on line $errline\n";
    
    // Escribir en el archivo de log
    error_log($error_message, 3, $logFile);
    
    // No ejecutar el gestor de errores interno de PHP
    return true;
}

// Función para registrar excepciones no capturadas
function customExceptionHandler($exception) {
    $logFile = __DIR__ . '/../logs/php_errors.log';
    $error_message = "[" . date('Y-m-d H:i:s') . "] EXCEPTION: " . $exception->getMessage() . " in " . 
                    $exception->getFile() . " on line " . $exception->getLine() . "\n";
    error_log($error_message, 3, $logFile);
    
    // Mostrar un mensaje genérico al usuario
    if (!headers_sent()) {
        header('HTTP/1.1 500 Internal Server Error');
    }
    echo "Ha ocurrido un error inesperado. El administrador ha sido notificado.";
}

// Establecer manejadores de errores
set_error_handler('customErrorHandler');
set_exception_handler('customExceptionHandler');

// Mostrar errores en pantalla solo en entorno de desarrollo
ini_set('display_errors', 0);
ini_set('log_errors', 1);
ini_set('error_log', __DIR__ . '/../logs/php_errors.log');
