<?php
// Reporte PDF Avanzado - Versión Refinada "Salud Amiga"
require_once '../modelos/SolicitudExamen.php';
require_once '../modelos/Persona.php';
require_once '../modelos/Usuario.php';

function generarPDFExamenAvanzado($idsolicitud, $paramsFirma = []) {
    if (ob_get_length()) ob_clean();

    $solicitud = new SolicitudExamen();
    $regSol = $solicitud->mostrar($idsolicitud);
    if (!$regSol) return false;

    $datos = json_decode($regSol['contenido'], true);
    $persona = new Persona();
    $regFull = $persona->imprimirDatosPaciente($regSol['idpersona']);
    $reg = (object) $regFull;

    // Configuración TCPDF
    $baseDir = dirname(__DIR__);
    $docRoot = isset($_SERVER['DOCUMENT_ROOT']) && !empty($_SERVER['DOCUMENT_ROOT']) ? rtrim($_SERVER['DOCUMENT_ROOT'], '/') : $baseDir;
    $cpanelSharedPath = '/home/' . get_current_user() . '/public_html/tcpdf/tcpdf.php';
    
    $tcpdfFile = '';
    $rutasProbar = [
        $docRoot . '/tcpdf/tcpdf.php',
        $cpanelSharedPath,
        $baseDir . '/tcpdf/tcpdf.php',
        $baseDir . '/../tcpdf/tcpdf.php',
        $baseDir . '/public/tcpdf/tcpdf.php',
        $baseDir . '/../public/tcpdf/tcpdf.php'
    ];
    foreach ($rutasProbar as $ruta) {
        if (file_exists($ruta)) {
            $tcpdfFile = $ruta;
            break;
        }
    }
    if (!$tcpdfFile) throw new Exception("TCPDF no encontrado");
    require_once($tcpdfFile);

    // Margenes idénticos a generar_pdf_solicitud.php
    $pdf = new TCPDF('P', 'mm', 'A4', true, 'UTF-8', false);
    $pdf->SetCreator('HC Medica');
    $pdf->SetTitle('Solicitud de Exámenes Médicos');
    $pdf->setPrintHeader(false);
    $pdf->setPrintFooter(false);
    $pdf->SetMargins(25.4, 30, 25.4);
    $pdf->SetAutoPageBreak(TRUE, 25);
    $pdf->AddPage();

    // BANNER (Posicionamiento Original)
    $bannerPath = $baseDir . '/public/img/banner.png';
    if (file_exists($bannerPath)) {
        $pdf->Image($bannerPath, 25, 10, 160, 0, 'PNG');
    }
    $pdf->Ln(25);

    // ESTILOS HTML (Réplica del CSS original)
    $style = '
    <style>
        body { font-family: "times", serif; font-size: 11pt; color: #000; line-height: 1.4; }
        .titulo { text-align: center; font-weight: bold; font-size: 15pt; text-decoration: underline; }
        .paciente-box { font-size: 10pt; line-height: 1.2; }
        .negrita { font-weight: bold; }
        .hr { border: 0.5px solid #333; }
        .list-examenes { font-size: 9pt; }
    </style>';

    $html = $style;
    $html .= '<div class="titulo">SOLICITUD DE EXÁMENES MÉDICOS</div><br><br>';

    $fechaEmision = date('d/m/Y', strtotime($regSol['fecha_emision']));
    $html .= '<div style="text-align: right; font-size: 10pt;">Fecha: ' . $fechaEmision . '</div><br>';

    // DATOS PACIENTE
    $html .= '<div class="paciente-box">';
    $html .= '<span class="negrita">PACIENTE:</span> ' . strtoupper($reg->paciente) . '<br>';
    $html .= '<span class="negrita">CÉDULA:</span> ' . $reg->num_documento . '<br>';
    $html .= '<span class="negrita">EDAD:</span> ' . (isset($reg->edad) ? $reg->edad : 'N/A') . ' &nbsp;&nbsp; ';
    $html .= '<span class="negrita">SEXO:</span> ' . $reg->sexo . '<br>';
    if (isset($reg->telefono) && !empty($reg->telefono)) {
        $html .= '<span class="negrita">TELÉFONO:</span> ' . $reg->telefono . '<br>';
    }
    $html .= '</div>';

    $html .= '<hr class="hr">';

    // DIAGNÓSTICO
    if (!empty($datos['diagnostico']['texto']) || !empty($datos['diagnostico']['codigos'])) {
        $diag_full = (!empty($datos['diagnostico']['codigos']) ? implode(", ", $datos['diagnostico']['codigos']) . " " : "") . $datos['diagnostico']['texto'];
        $html .= '<div style="margin-top: 10px; font-size: 10pt;">';
        $html .= '<span class="negrita">DIAGNÓSTICO PRESUNTIVO:</span><br>';
        $html .= strtoupper($diag_full);
        $html .= '</div>';
    }

    // CABECERA DE EXÁMENES
    $html .= '<div style="margin-top: 10px; font-size: 10pt;">';
    $html .= '<span class="negrita">EXÁMENES SOLICITADOS:</span>';
    $html .= '</div>';

    $pdf->writeHTML($html, true, false, true, false, '');

    // LISTADO DE EXÁMENES EN COLUMNAS (Para ahorrar espacio con elegancia)
    $pdf->SetFont('times', '', 9);
    $lista = $datos['lista_examenes'];
    
    $ancho_total = 160;
    $n_cols = 3;
    $col_w = $ancho_total / $n_cols;
    $x_orig = 25.4;
    $y_actual = $pdf->GetY();
    
    $i = 0;
    foreach ($lista as $ex) {
        $col = $i % $n_cols;
        if ($i > 0 && $col == 0) {
            $y_actual = $pdf->GetY();
        }
        
        // Control de página
        if ($y_actual > 265) {
            $pdf->AddPage();
            $y_actual = 30; // Después del margen superior
        }

        $pdf->SetXY($x_orig + ($col * $col_w), $y_actual);
        
        // Checkbox simulado sutil
        $pdf->SetFont('times', 'B', 9);
        $pdf->Cell(4, 4, '•', 0, 0); // Usamos un bullet elegante en lugar de [X] para que se vea más clínico
        $pdf->SetFont('times', '', 9);
        
        // Nombre del examen
        $pdf->MultiCell($col_w - 5, 4, strtoupper($ex), 0, 'L', false, 1);
        
        $i++;
    }

    $pdf->Ln(5);

    // INDICACIONES CLÍNICAS
    if (!empty($datos['indicaciones'])) {
        $pdf->SetFont('times', 'B', 10);
        $pdf->Cell(0, 5, 'INDICACIONES CLÍNICAS:', 0, 1);
        $pdf->SetFont('times', '', 10);
        $pdf->MultiCell(0, 5, strtoupper($datos['indicaciones']), 0, 'L');
        $pdf->Ln(2);
    }

    // CIERRE REGLAMENTARIO
    $pdf->Ln(5);
    $pdf->SetFont('times', '', 10);
    $pdf->Cell(0, 5, 'Solicito comedidamente se realicen los exámenes indicados.', 0, 1, 'L');
    $pdf->SetFont('times', 'B', 10);
    $pdf->Cell(0, 5, 'Atentamente', 0, 1, 'L');

    // FECHA DE EMISIÓN (Pie de página técnico)
    $pdf->SetY($pdf->GetY() + 5);
    $pdf->SetFont('times', '', 8);
    $fechaFull = date('d/m/Y H:i', strtotime($regSol['fecha_registro']));
    $pdf->Cell(0, 5, 'Fecha de Emisión: ' . $fechaFull, 0, 1, 'R');

    // FIRMA DIGITAL INTEGRADA (Mismo Bloque que el original)
    if (!empty($paramsFirma)) {
        $certificadoContent = file_get_contents($paramsFirma['rutaCert']);
        $certs = [];
        if (openssl_pkcs12_read($certificadoContent, $certs, $paramsFirma['password'])) {
            $pdf->setSignature($certs['cert'], $certs['pkey'], $paramsFirma['password'], '', 2, $paramsFirma['info']);
            
            $x_firma = 50;
            $y_firma = $pdf->GetY() + 10;
            if ($y_firma > 240) { $pdf->AddPage(); $y_firma = 30; }

            $styleQR = array('border' => false, 'vpadding' => 1, 'hpadding' => 1, 'fgcolor' => array(0, 0, 0));
            $qrText = "FIRMADO POR: " . strtoupper($paramsFirma['info']['medico']) . "\nRAZON: " . $paramsFirma['info']['razon'] . "\nFECHA: " . date('Y-m-d H:i:s') . "\nVALIDAR CON: firmadigital.gob.ec";
            $pdf->write2DBarcode($qrText, 'QRCODE,H', $x_firma, $y_firma, 22, 22, $styleQR, 'N');
            
            $pdf->SetFont('courier', '', 9);
            $pdf->SetXY($x_firma + 24, $y_firma + 2);
            $pdf->Cell(0, 0, "Firmado electrónicamente por:", 0, 0, 'L');
            $pdf->SetFont('courier', 'B', 12);
            $pdf->SetXY($x_firma + 24, $y_firma + 6);
            $pdf->Cell(0, 0, strtoupper($paramsFirma['info']['medico']), 0, 0, 'L');
            $pdf->SetFont('courier', '', 8);
            $pdf->SetXY($x_firma + 24, $y_firma + 16);
            $pdf->Cell(0, 0, "Validar únicamente con FirmaEC", 0, 0, 'L');
        }
    }

    $rutaFinal = $baseDir . '/files/solicitudes/avanzada_' . $idsolicitud . '.pdf';
    if (!file_exists($baseDir . '/files/solicitudes')) mkdir($baseDir . '/files/solicitudes', 0755, true);
    
    $pdf->Output($rutaFinal, 'F');
    return $rutaFinal;
}
?>
