<?php
/**
 * AJAX handler para obtener registros individuales de la base de datos
 * Versión optimizada para evitar problemas de JSON
 */

// Activar captura de buffer para controlar la salida
ob_start();

// Deshabilitar la salida de errores a la pantalla
ini_set('display_errors', 0);
error_reporting(E_ALL);

// Incluir archivo de conexión
require_once 'utils_database.php';

try {
    // Establecer conexión a la base de datos usando tu función
    $conn = Activarmysql();
    
    if (!$conn) {
        throw new Exception("Error de conexión a la base de datos");
    }
    
    // Obtener parámetros
    $table = isset($_GET['table']) ? trim($_GET['table']) : '';
    $id = isset($_GET['id']) ? trim($_GET['id']) : '';
    
    // Validar parámetros
    if (empty($table) || empty($id)) {
        // Limpiar cualquier salida previa
        ob_clean();
        
        header('HTTP/1.1 400 Bad Request');
        header('Content-Type: application/json; charset=utf-8');
        echo json_encode(['error' => 'Faltan parámetros requeridos']);
        exit;
    }
    
    // Sanitizar los datos de entrada
    $table = mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $table);
    $id = intval($id);
    
    // Construir consulta
    $sql = "SELECT * FROM `{$table}` WHERE id = {$id} LIMIT 1";
    
    // Ejecutar consulta
    $result = mysqli_query($GLOBALS["___mysqli_ston"], $sql);
    
    // Limpiar cualquier salida que pueda haberse generado hasta ahora
    ob_clean();
    
    // Establecer encabezados de respuesta
    header('Content-Type: application/json; charset=utf-8');
    
    if ($result && mysqli_num_rows($result) > 0) {
        // Registro encontrado
        $data = mysqli_fetch_assoc($result);
        
        // Limpiar y procesar los datos para asegurar compatibilidad JSON
        foreach ($data as $key => &$value) {
            if (is_string($value)) {
                // Eliminar caracteres no imprimibles y de control
                $value = preg_replace('/[\x00-\x1F\x7F\xA0]/u', '', $value);
                
                // Asegurar que es UTF-8 válido
                if (!mb_check_encoding($value, 'UTF-8')) {
                    $value = mb_convert_encoding($value, 'UTF-8', 'ISO-8859-1');
                }
                
                // Limitar longitud para evitar problemas
                if (strlen($value) > 10000) {
                    $value = substr($value, 0, 10000) . '...';
                }
            } elseif ($value === null) {
                // Convertir NULL a cadena vacía para evitar problemas
                $value = "";
            }
        }
        
        // Liberar el resultado
        mysqli_free_result($result);
        
        // Generar JSON con múltiples flags para máxima compatibilidad
        $json = json_encode($data, JSON_UNESCAPED_UNICODE | JSON_HEX_QUOT | JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS);
        
        // Verificar si hubo error en la codificación JSON
        if ($json === false) {
            throw new Exception("Error al codificar JSON: " . json_last_error_msg());
        }
        
        echo $json;
    } else {
        // Registro no encontrado
        header('HTTP/1.1 404 Not Found');
        echo json_encode(['error' => 'Registro no encontrado']);
    }
    
    // Cerrar la conexión
    if (isset($GLOBALS["___mysqli_ston"]) && $GLOBALS["___mysqli_ston"]) {
        mysqli_close($GLOBALS["___mysqli_ston"]);
    }
    
} catch (Exception $e) {
    // Limpiar cualquier salida
    ob_clean();
    
    // Responder con error
    header('HTTP/1.1 500 Internal Server Error');
    header('Content-Type: application/json; charset=utf-8');
    echo json_encode(['error' => 'Error del servidor: ' . $e->getMessage()]);
}
?>