<?php
/**
 * Script de prueba para verificar la conexión y subida a OpenKM
 * Ejecutar desde el navegador: https://seminarioscorma.cl/corma/test_openkm.php
 */

header('Content-Type: text/html; charset=utf-8');

echo "<!DOCTYPE html><html><head><meta charset='UTF-8'><title>Test OpenKM</title></head><body>";
echo "<h1>Test de Conexión a OpenKM</h1>";
echo "<pre>";

// Incluir el archivo de funciones
$rutaOpenKM = __DIR__ . '/openkm_upload.php';
if (!file_exists($rutaOpenKM)) {
    // Intentar ruta alternativa
    $rutaOpenKM = dirname(__FILE__) . '/openkm_upload.php';
}

if (file_exists($rutaOpenKM)) {
    echo "Archivo encontrado: $rutaOpenKM\n";
    echo "Tamaño del archivo: " . filesize($rutaOpenKM) . " bytes\n";
    
    // Habilitar mostrar errores
    error_reporting(E_ALL);
    ini_set('display_errors', 1);
    
    // Intentar incluir con captura de errores
    ob_start();
    try {
        $resultado = include $rutaOpenKM;
        $output = ob_get_clean();
        
        if ($resultado === false) {
            die("ERROR: No se pudo incluir el archivo. Puede haber un error de sintaxis.\n");
        }
        
        if (!empty($output)) {
            echo "Salida al incluir archivo:\n$output\n";
        }
        
        echo "Archivo incluido exitosamente\n";
        
        // Verificar que las funciones estén definidas (PHP es case-insensitive para nombres de funciones)
        $funciones = ['verificarCarpetaOpenKM', 'crearCarpetaOpenKM', 'subirDocumentoOpenKM', 'formatearNombreCarpeta', 'procesarSubidaOpenKM'];
        $funcionesFaltantes = [];
        $funcionesEncontradas = [];
        
        foreach ($funciones as $func) {
            // PHP es case-insensitive para nombres de funciones, así que verificar en minúsculas también
            $funcLower = strtolower($func);
            if (!function_exists($func) && !function_exists($funcLower)) {
                $funcionesFaltantes[] = $func;
            } else {
                $funcionesEncontradas[] = $func;
            }
        }
        
        if (!empty($funcionesFaltantes)) {
            echo "\nADVERTENCIA: Las siguientes funciones no están definidas: " . implode(', ', $funcionesFaltantes) . "\n";
            echo "Funciones encontradas: " . implode(', ', $funcionesEncontradas) . "\n";
            echo "\nTodas las funciones definidas relacionadas con OpenKM:\n";
            $todasFunciones = get_defined_functions()['user'];
            foreach ($todasFunciones as $f) {
                if (stripos($f, 'openkm') !== false || stripos($f, 'carpeta') !== false || stripos($f, 'formatear') !== false) {
                    echo "  - $f\n";
                }
            }
            echo "\nContinuando con las pruebas usando las funciones disponibles...\n\n";
        } else {
            echo "Todas las funciones están definidas correctamente\n\n";
        }
    } catch (Throwable $e) {
        ob_end_clean();
        die("ERROR al incluir archivo: " . $e->getMessage() . "\n" . $e->getTraceAsString() . "\n");
    }
} else {
    die("ERROR: No se encontró el archivo openkm_upload.php\nRutas intentadas:\n- " . __DIR__ . "/openkm_upload.php\n- " . dirname(__FILE__) . "/openkm_upload.php\n");
}

echo "=== CONFIGURACIÓN ===\n";
echo "URL OpenKM: https://srvdgx3.midatech.cl/OpenKM/\n";
echo "Usuario: okmAdmin\n";
echo "Clave: admin\n\n";

// Test 1: Verificar carpeta base
echo "=== TEST 1: Verificar carpeta base /okm:root/Carpeta ===\n";
$carpetaBase = '/okm:root/Carpeta';
if (function_exists('verificarCarpetaOpenKM')) {
    $existe = verificarCarpetaOpenKM($carpetaBase);
    echo "Resultado: " . ($existe ? "✓ Existe" : "✗ No existe") . "\n\n";
} else {
    echo "⚠ Función verificarCarpetaOpenKM no disponible, saltando test\n\n";
}

// Test 2: Crear carpeta de prueba si no existe
echo "=== TEST 2: Crear carpeta de prueba ===\n";
$carpetaPrueba = '/okm:root/Carpeta/TEST_CONEXION';
if (function_exists('verificarCarpetaOpenKM') && function_exists('crearCarpetaOpenKM')) {
    if (!verificarCarpetaOpenKM($carpetaPrueba)) {
        $creada = crearCarpetaOpenKM($carpetaPrueba);
        echo "Resultado: " . ($creada ? "✓ Carpeta creada" : "✗ Error al crear carpeta") . "\n";
    } else {
        echo "Resultado: ✓ Carpeta ya existe\n";
    }
} else {
    echo "⚠ Funciones no disponibles, saltando test\n";
}
echo "\n";

// Test 3: Crear archivo de prueba
echo "=== TEST 3: Crear archivo de prueba ===\n";
$archivoPrueba = tempnam(sys_get_temp_dir(), 'test_openkm_');
$contenidoPrueba = "Este es un archivo de prueba generado el " . date('Y-m-d H:i:s');
file_put_contents($archivoPrueba, $contenidoPrueba);
echo "Archivo temporal creado: $archivoPrueba\n";
echo "Tamaño: " . filesize($archivoPrueba) . " bytes\n\n";

// Test 4: Subir archivo de prueba
echo "=== TEST 4: Subir archivo de prueba a OpenKM ===\n";
try {
    // Usar la función disponible (puede estar en minúsculas)
    $funcSubir = function_exists('subirDocumentoOpenKM') ? 'subirDocumentoOpenKM' : 'subirdocumentoopenkm';
    if (!function_exists($funcSubir)) {
        throw new Exception("Función de subida no disponible");
    }
    
    $resultado = call_user_func($funcSubir,
        $carpetaPrueba,
        'test_' . date('YmdHis') . '.txt',
        $archivoPrueba
    );
    
    if ($resultado['success']) {
        echo "✓ Archivo subido exitosamente\n";
        echo "Ruta pública: " . $resultado['ruta'] . "\n";
        echo "Ruta OpenKM: " . $resultado['rutaOpenKM'] . "\n";
        echo "Mensaje: " . $resultado['mensaje'] . "\n";
    } else {
        echo "✗ Error al subir archivo\n";
        echo "Mensaje: " . ($resultado['mensaje'] ?? 'Error desconocido') . "\n";
    }
} catch (Exception $e) {
    echo "✗ Excepción: " . $e->getMessage() . "\n";
}
echo "\n";

// Test 5: Probar función completa
echo "=== TEST 5: Probar función procesarSubidaOpenKM ===\n";
try {
    // Usar la función disponible (puede estar en minúsculas)
    $funcProcesar = function_exists('procesarSubidaOpenKM') ? 'procesarSubidaOpenKM' : 'procesarsubidaopenkm';
    if (!function_exists($funcProcesar)) {
        throw new Exception("Función procesarSubidaOpenKM no disponible");
    }
    
    $resultado = call_user_func($funcProcesar,
        '17.969.616-9',
        'DE PRUEBA',
        'test',
        $archivoPrueba,
        'test.jpg'
    );
    
    if ($resultado['success']) {
        echo "✓ Proceso completo exitoso\n";
        echo "Ruta pública: " . $resultado['ruta'] . "\n";
        echo "Mensaje: " . $resultado['mensaje'] . "\n";
    } else {
        echo "✗ Error en el proceso\n";
        echo "Mensaje: " . ($resultado['mensaje'] ?? 'Error desconocido') . "\n";
    }
} catch (Exception $e) {
    echo "✗ Excepción: " . $e->getMessage() . "\n";
}
echo "\n";

// Test 6: Verificar formato de nombres
echo "=== TEST 6: Verificar formato de nombres ===\n";
$rut = '17.969.616-9';
$apellido = 'DE PRUEBA';
$funcFormatear = function_exists('formatearNombreCarpeta') ? 'formatearNombreCarpeta' : 'formatearnombrecarpeta';
if (function_exists($funcFormatear)) {
    $nombreCarpeta = call_user_func($funcFormatear, $rut, $apellido);
    echo "RUT: $rut\n";
    echo "Apellido: $apellido\n";
    echo "Nombre carpeta formateado: $nombreCarpeta\n";
    echo "Resultado esperado: 17969616-9-DE_PRUEBA\n";
    echo "✓ " . ($nombreCarpeta === '17969616-9-DE_PRUEBA' ? 'Correcto' : 'Incorrecto') . "\n\n";
} else {
    echo "⚠ Función formatearNombreCarpeta no disponible\n\n";
}

// Limpiar archivo temporal
if (file_exists($archivoPrueba)) {
    unlink($archivoPrueba);
    echo "Archivo temporal eliminado\n";
}

echo "=== FIN DEL TEST ===\n";
echo "</pre>";
echo "</body></html>";
?>

