<?php
/**
 * Archivo de prueba de conexión a la base de datos y al endpoint
 * Solo verifica si puede conectarse, sin recibir datos completos
 */
// Cargar archivo de configuración
require_once __DIR__ . '/config.php';

echo "Test de conexión a base de datos\n";
echo "===============================\n\n";

echo "Configuración:\n";
echo "Host: {$db_config['host']}\n";
echo "Base de datos: {$db_config['name']}\n";
echo "Usuario: {$db_config['user']}\n";
echo "Charset: {$db_config['charset']}\n\n";

// Intentar conexión a base de datos
try {
    $db = new PDO(
            "mysql:host={$db_config['host']};dbname={$db_config['name']};charset={$db_config['charset']}",
            $db_config['user'],
            $db_config['pass']
    );
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    echo "✓ Conexión exitosa a la base de datos\n\n";

    // Verificar tablas necesarias
    $tablas = [
        'numeros_economicos' => false
    ];

    $stmt = $db->query("SHOW TABLES");
    while ($row = $stmt->fetch(PDO::FETCH_NUM)) {
        if (isset($tablas[$row[0]])) {
            $tablas[$row[0]] = true;
        }
    }

    foreach ($tablas as $tabla => $existe) {
        echo ($existe ? "✓" : "✗") . " Tabla '$tabla': " . ($existe ? "Presente" : "No encontrada") . "\n";
    }

    // Probar autenticación y conexión al endpoint
    echo "\nAutenticando y probando conexión al endpoint...\n";

    $url_base = 'http://74.208.26.126/caronte_test/';
    $usuario = 'soporte';
    $contra_nueva = '40bd001563085fc35165329ea1ff5c5ecbdbbeef';
    $cookie_de_sesion = '';
    
    // Obtener sesión inicial
    $respuesta_sesion_activa = @file_get_contents($url_base . 'public_html/index.php/api/auth/session_activa');
    
    if ($respuesta_sesion_activa === false) {
        echo "✗ No se pudo obtener la sesión inicial\n";
    } else {
        echo "✓ Sesión inicial obtenida\n";
    }
    
    // Obtener cookie de la respuesta
    $encabezado_respuesta = $http_response_header;
    if (is_array($encabezado_respuesta) && count($encabezado_respuesta) > 0) {
        foreach ($encabezado_respuesta as $elemento) {
            if (substr($elemento, 0, 10) == 'Set-Cookie') {
                $cookie_de_sesion = substr($elemento, 4, 44);
                echo "✓ Cookie de sesión obtenida\n";
            }
        }
    }
    
    if (empty($cookie_de_sesion)) {
        echo "✗ No se pudo obtener la cookie de sesión\n";
    }
    
    // Datos para login
    $postdata = http_build_query(
            array(
                'username' => $usuario,
                'password' => $contra_nueva,
                'new_password' => $contra_nueva,
                'intentos_captcha' => '1'
            )
    );

    $optsLogin = array('http' =>
        array(
            'method' => 'POST',
            'header' => "Content-Type: application/x-www-form-urlencoded\r\n" .
            "$cookie_de_sesion\r\n",
            'content' => $postdata
        )
    );

    $optsGets = array('http' =>
        array(
            'method' => 'GET',
            'header' => "$cookie_de_sesion\r\n"
        )
    );

    // Realizar login
    $context = stream_context_create($optsLogin);
    $respuesta_login = @file_get_contents($url_base . 'public_html/index.php/api/auth/acceso?v=0.60933668797657031', false, $context);
    
    if ($respuesta_login === false) {
        echo "✗ Error al iniciar sesión\n";
    } else {
        $login_data = json_decode($respuesta_login, true);
        if ($login_data && isset($login_data['success']) && $login_data['success']) {
            echo "✓ Inicio de sesión exitoso\n";
        } else {
            echo "✗ Inicio de sesión fallido\n";
        }
    }

    // Verificar sesión activa
    $respuesta_sesion_activa = @file_get_contents($url_base . 'public_html/index.php/api/auth/session_activa', false, stream_context_create($optsGets));
    
    if ($respuesta_sesion_activa !== false) {
        $sesion_data = json_decode($respuesta_sesion_activa, true);
        if ($sesion_data && isset($sesion_data['success']) && $sesion_data['success']) {
            echo "✓ Sesión activa confirmada\n";
        } else {
            echo "✗ Sesión no está activa\n";
        }
    } else {
        echo "✗ Error al verificar si la sesión está activa\n";
    }

    // Verificar solo si se puede acceder al endpoint sin obtener datos completos
    echo "\nProbando acceso al endpoint...\n";
    
    // Configurar opciones para solo obtener headers sin descargar todo el contenido
    $optsHeadOnly = array('http' =>
        array(
            'method' => 'HEAD',
            'header' => "$cookie_de_sesion\r\n",
            'timeout' => 10
        )
    );
    
    $context = stream_context_create($optsHeadOnly);
    $headers = @get_headers($endpoint_url, 1, $context);
    
    if ($headers !== false) {
        $status_line = $headers[0];
        if (strpos($status_line, '200') !== false) {
            echo "✓ El endpoint está accesible (código 200 OK)\n";
            
            // Verificar si podemos obtener los primeros bytes del endpoint (sin descargar todo)
            $opts = array('http' =>
                array(
                    'method' => 'GET',
                    'header' => "$cookie_de_sesion\r\n",
                    'max_redirects' => 0,
                    'timeout' => 10
                )
            );
            
            $context = stream_context_create($opts);
            $handle = @fopen($endpoint_url, 'r', false, $context);
            
            if ($handle) {
                $sample = fread($handle, 50);  // Solo leer 50 bytes para verificar
                fclose($handle);
                
                if ($sample && strlen($sample) > 0) {
                    echo "✓ El endpoint responde con datos (muestra parcial)\n";
                } else {
                    echo "✗ El endpoint no devolvió datos en la muestra\n";
                }
            } else {
                echo "✗ No se pudo abrir un flujo de datos al endpoint\n";
            }
        } else {
            echo "✗ El endpoint respondió con código de error: $status_line\n";
        }
    } else {
        echo "✗ No se pudo comprobar si el endpoint está accesible\n";
    }
    
    echo "\nPrueba de conexión completada.\n";

} catch (PDOException $e) {
    echo "✗ Error de conexión a la base de datos: " . $e->getMessage() . "\n";
    echo "\nRecomendaciones:\n";
    echo "1. Verifica que el servidor MySQL esté en ejecución\n";
    echo "2. Verifica que el usuario y la contraseña sean correctos\n";
    echo "3. Comprueba que la base de datos '{$db_config['name']}' exista\n";
    echo "4. Revisa el archivo config.php y actualiza los valores si es necesario\n";
} catch (Exception $e) {
    echo "✗ Error general: " . $e->getMessage() . "\n";
}