<?php
// reportes/ver_documento.php
// Proxy universal para visualizar PDFs
// Uso: ../reportes/ver_documento.php?f=nombre_archivo.pdf

if (!isset($_GET['f']))
    die("Archivo no especificado");

// Seguridad: Solo permitir nombres de archivo seguros
$archivo = basename($_GET['f']);

// Rutas posibles donde buscar (AJUSTADAS DESDE CARPETA REPORTES)
$baseDir = dirname(__DIR__); // Raíz del proyecto

$rutas = [
    $baseDir . '/files/pdf_msp/' . $archivo,
    $baseDir . '/public/documentos_msp/' . $archivo,
    $baseDir . '/files/recetas_firmadas/' . $archivo
];

// Lógica inteligente para Recetas con Timestamp (receta_ID_firmada_YYYYMMDDHHMMSS.pdf)
// Formato esperado: ..._YYYYMMDDHHMMSS.pdf
if (preg_match('/_(\d{4})(\d{2})(\d{2})\d{6}\.pdf$/', $archivo, $matches)) {
    $anio = $matches[1];
    $mes = $matches[2];
    $dia = $matches[3];
    // Añadir ruta con fecha deducida /2026/01/04/
    $rutas[] = $baseDir . '/files/recetas_firmadas/' . $anio . '/' . $mes . '/' . $dia . '/' . $archivo;
}

// Lógica de fallback general (buscar en subdirectorios de recetas si es reciente)
$rutas[] = $baseDir . '/files/recetas_firmadas/' . date('Y/m/d') . '/' . $archivo;

$encontrado = false;
$rutaFinal = '';

foreach ($rutas as $r) {
    if (file_exists($r)) {
        $rutaFinal = $r;
        $encontrado = true;
        break;
    }
}

// BÚSQUEDA RECURSIVA INTELIGENTE (FIX PÉRDIDA DE DOCUMENTOS)
// Busca en todos los subdirectorios de recetas_firmadas/ y pdf_msp/
if (!$encontrado) {
    $carpetasBusqueda = [
        $baseDir . '/files/recetas_firmadas/',
        $baseDir . '/files/pdf_msp/'
    ];
    
    foreach ($carpetasBusqueda as $carpeta) {
        if (!file_exists($carpeta)) continue;
        
        try {
            $iterator = new RecursiveIteratorIterator(
                new RecursiveDirectoryIterator($carpeta, RecursiveDirectoryIterator::SKIP_DOTS),
                RecursiveIteratorIterator::SELF_FIRST
            );
            
            foreach ($iterator as $file) {
                if ($file->isFile() && $file->getFilename() === $archivo) {
                    $rutaFinal = $file->getPathname();
                    $encontrado = true;
                    break 2; // Salir de ambos loops
                }
            }
        } catch (Exception $e) {
            error_log("Error en búsqueda recursiva: " . $e->getMessage());
        }
    }
}

if ($encontrado) {
    header('Content-Type: application/pdf');
    header('Content-Disposition: inline; filename="' . $archivo . '"');
    header('Content-Length: ' . filesize($rutaFinal));
    readfile($rutaFinal);
    exit;
} else {
    // Intento final desesperado: buscar en todo recetas_firmadas (lento pero útil)
    // Solo si no se encontró y parece una receta
    if (strpos($archivo, 'receta') !== false) {
        $files = glob($baseDir . '/files/recetas_firmadas/*/*/*/' . $archivo);
        if ($files && count($files) > 0) {
            $rutaFinal = $files[0];
            header('Content-Type: application/pdf');
            header('Content-Disposition: inline; filename="' . $archivo . '"');
            header('Content-Length: ' . filesize($rutaFinal));
            readfile($rutaFinal);
            exit;
        }
    }

    http_response_code(404);
    echo "<div style='font-family:sans-serif; text-align:center; padding:50px;'>";
    echo "<h1>⚠️ Documento no encontrado</h1>";
    echo "<p>El archivo <b>$archivo</b> no se encuentra en las bóvedas del sistema.</p>";
    echo "<hr><small>Diagnóstico: Rutas verificadas sin éxito.</small>";
    echo "</div>";
}
?>