<?php
/**
 * Test para simular exactamente lo que hace el JavaScript
 * Verificar si hay problema con BOM o caracteres invisibles
 */

// Simular sesión
session_start();
$_SESSION['user_id'] = 1;

echo "<h2>Test de Respuesta JSON - Simulación JavaScript</h2>\n";

// Crear un script que haga exactamente lo que hace el JavaScript
?>
<!DOCTYPE html>
<html>
<head>
    <title>Test JSON Response</title>
</head>
<body>
    <h3>Test de Fetch API como JavaScript</h3>
    <button onclick="testFetch()">Probar Fetch API</button>
    <div id="resultado"></div>
    
    <script>
    async function testFetch() {
        const resultado = document.getElementById('resultado');
        resultado.innerHTML = '<p>Enviando petición...</p>';
        
        try {
            const formData = {
                lead_id: 3,
                type: 'note',
                subject: 'Test Fetch API',
                description: 'Test desde JavaScript',
                activity_date: new Date().toISOString(),
                created_by: 1
            };
            
            console.log('Enviando datos:', formData);
            
            const response = await fetch('modules/leads/add_note.php', {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json',
                    'X-Requested-With': 'XMLHttpRequest'
                },
                body: JSON.stringify(formData)
            });
            
            console.log('Response status:', response.status);
            console.log('Response headers:', response.headers);
            
            // Obtener texto crudo primero
            const responseText = await response.text();
            console.log('Response text:', responseText);
            
            resultado.innerHTML += '<h4>Respuesta cruda:</h4>';
            resultado.innerHTML += '<pre style="background: #f4f4f4; padding: 10px; border: 1px solid #ccc; max-height: 200px; overflow: auto;">' + 
                                  responseText.replace(/</g, '&lt;').replace(/>/g, '&gt;') + '</pre>';
            
            // Verificar longitud y caracteres especiales
            resultado.innerHTML += '<h4>Análisis de caracteres:</h4>';
            resultado.innerHTML += '<p>Longitud: ' + responseText.length + ' caracteres</p>';
            
            // Buscar BOM o caracteres invisibles
            if (responseText.charCodeAt(0) === 0xFEFF) {
                resultado.innerHTML += '<p style="color: red;">⚠️ Se detectó BOM (Byte Order Mark) al inicio</p>';
            }
            
            // Mostrar códigos de caracteres del inicio y final
            const primeros20 = [];
            const ultimos20 = [];
            for (let i = 0; i < Math.min(20, responseText.length); i++) {
                primeros20.push(responseText.charCodeAt(i));
            }
            for (let i = Math.max(0, responseText.length - 20); i < responseText.length; i++) {
                ultimos20.push(responseText.charCodeAt(i));
            }
            
            resultado.innerHTML += '<p>Primeros 20 códigos de caracter: ' + primeros20.join(', ') + '</p>';
            resultado.innerHTML += '<p>Últimos 20 códigos de caracter: ' + ultimos20.join(', ') + '</p>';
            
            // Intentar parsear JSON
            try {
                const jsonData = JSON.parse(responseText);
                resultado.innerHTML += '<h4 style="color: green;">✅ JSON parseado exitosamente:</h4>';
                resultado.innerHTML += '<pre>' + JSON.stringify(jsonData, null, 2) + '</pre>';
            } catch (jsonError) {
                resultado.innerHTML += '<h4 style="color: red;">❌ Error al parsear JSON:</h4>';
                resultado.innerHTML += '<p>' + jsonError.message + '</p>';
                
                // Mostrar más detalles del error
                if (jsonError.message.includes('position')) {
                    const match = jsonError.message.match(/position (\d+)/);
                    if (match) {
                        const pos = parseInt(match[1]);
                        resultado.innerHTML += '<p>Carácter problemático en posición ' + pos + ': "' + 
                                              responseText.charAt(pos) + '" (código: ' + 
                                              responseText.charCodeAt(pos) + ')</p>';
                    }
                }
            }
            
        } catch (error) {
            console.error('Error completo:', error);
            resultado.innerHTML = '<h4 style="color: red;">Error:</h4><p>' + error.message + '</p>';
        }
    }
    
    // Auto-ejecutar al cargar
    window.addEventListener('load', function() {
        setTimeout(testFetch, 1000);
    });
    </script>
</body>
</html>