<?php
// test_firma.php
// Script de diagnóstico para Firma Electrónica

echo "<h1>Diagnóstico de Firma Electrónica</h1>";

$errores = [];
$warnings = [];
$info = [];

// 1. Verificar versión de PHP
$phpVersion = phpversion();
$info[] = "Versión de PHP: " . $phpVersion;
if (version_compare($phpVersion, '7.4.0', '<')) {
    $warnings[] = "Estás usando una versión de PHP muy antigua ($phpVersion). Se recomienda usar PHP 7.4 o superior para mejor compatibilidad con certificados modernos.";
}

// 2. Verificar extensión OpenSSL
if (extension_loaded('openssl')) {
    $info[] = "Extensión OpenSSL: <span style='color:green'>HABILITADA</span>";
} else {
    $errores[] = "Extensión OpenSSL: <span style='color:red'>DESHABILITADA</span>. Indispensable para firma electrónica.";
}

// 2.b Verificar Base de Datos
require_once "config/Conexion.php";
if (isset($conexion)) {
    $res = ejecutarConsulta("SHOW TABLES LIKE 'certificados_medicos'");
    if ($res->num_rows > 0) {
        $info[] = "Tabla 'certificados_medicos': <span style='color:green'>EXISTE OK</span>";
    } else {
        $errores[] = "Tabla 'certificados_medicos': <span style='color:red'>NO EXISTE</span>. Debes ejecutar el código SQL que te pasé.";
    }
}


// 3. Verificar permisos de carpetas
$carpetasRequeridas = [
    'files',
    'files/certificados_encriptados',
    'files/recetas_firmadas'
];

// Asumimos que estamos en ajax/test_firma.php, así que subimos un nivel para encontrar 'files' si la estructura es esa, 
// o verificamos donde deberían estar.
// Basado en gestion_certificados.php: $rutaDir = '../files/certificados_encriptados/';
// Esto implica que test_firma.php debería estar en ajax/ o similar. Lo pondremos en la raiz de 'ajax' (c:\gemini antigravity\ajax).
// Entonces las carpetas son ./files/ ...

foreach ($carpetasRequeridas as $carpeta) {
    if (!file_exists($carpeta)) {
        // Intentar crear
        if (@mkdir($carpeta, 0755, true)) {
            $info[] = "Carpeta '$carpeta': Creada correctamente.";
        } else {
            $errores[] = "Carpeta '$carpeta': No existe y no se pudo crear. Creela manualmente.";
        }
    }

    if (file_exists($carpeta)) {
        if (is_writable($carpeta)) {
            $info[] = "Permisos '$carpeta': <span style='color:green'>ESCRITURA OK</span>";
        } else {
            $errores[] = "Permisos '$carpeta': <span style='color:red'>ERROR DE ESCRITURA</span>. (CHMOD 755 o 777 necesario)";
        }
    }
}

// 4. Verificar configuración de Timezone
$timezone = date_default_timezone_get();
$info[] = "Timezone servidor: " . $timezone;


// RESULTADOS
echo "<h2>Resultados</h2>";

if (count($errores) > 0) {
    echo "<div style='background-color: #ffcccc; padding: 10px; border: 1px solid red;'>";
    echo "<h3>⛔ Se encontraron problemas Críticos:</h3>";
    echo "<ul>";
    foreach ($errores as $err) {
        echo "<li>$err</li>";
    }
    echo "</ul>";
    echo "</div>";
} else {
    echo "<div style='background-color: #ccffcc; padding: 10px; border: 1px solid green;'>";
    echo "<h3>✅ Todo parece correcto</h3>";
    echo "<p>El servidor cumple con los requisitos básicos.</p>";
    echo "</div>";
}

if (count($warnings) > 0) {
    echo "<div style='background-color: #fff3cd; padding: 10px; border: 1px solid #ffeeba;'>";
    echo "<h3>⚠️ Advertencias:</h3>";
    echo "<ul>";
    foreach ($warnings as $warn) {
        echo "<li>$warn</li>";
    }
    echo "</ul>";
    echo "</div>";
}

if (count($info) > 0) {
    echo "<h3>Información:</h3>";
    echo "<ul>";
    foreach ($info as $msg) {
        echo "<li>$msg</li>";
    }
    echo "</ul>";
}
?>