<?php
// Función para generar PDF de solicitud de examen (compatible con firma digital)
require_once '../modelos/SolicitudExamen.php';
require_once '../modelos/Persona.php';
require_once '../modelos/Usuario.php';

function generarPDFSolicitud($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);
    $idpersona = $regSol['idpersona'];
    $tipo = $regSol['tipo'];

    // Obtener datos paciente
    $persona = new Persona();
    // Usar metodo seguro para pacientes nuevos sin historia
    $regFull = $persona->imprimirDatosPaciente($idpersona);
    $reg = (object) $regFull;

    // Obtener datos del médico
    $idMedico = $regSol['idempleado'];
    $usuarioModel = new Usuario();
    $regMedico = $usuarioModel->mostrar($idMedico);

    $nombreMedico = strtoupper($regMedico['nombre'] . ' ' . $regMedico['apaterno'] . ' ' . $regMedico['amaterno']);
    $cedulaMedico = $regMedico['num_documento'];
    $registroSenescyt = isset($regMedico['registro_senescyt']) ? $regMedico['registro_senescyt'] : '...........';

    // Cargar 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) {
        $busqueda = glob($baseDir . '/public/*/tcpdf.php');
        $tcpdfFile = !empty($busqueda) ? $busqueda[0] : '';
    }
    if (!$tcpdfFile)
        throw new Exception("TCPDF no encontrado.");
    require_once($tcpdfFile);

    $pdf = new TCPDF('P', 'mm', 'A4', true, 'UTF-8', false);
    $pdf->SetCreator('HC Medica');
    $pdf->SetTitle('Solicitud de Exámenes');
    $pdf->setPrintHeader(false);
    $pdf->setPrintFooter(false);
    $pdf->SetMargins(25.4, 30, 25.4);
    $pdf->SetAutoPageBreak(TRUE, 25);
    $pdf->AddPage();

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

    // CSS STYLES
    $html = '<style>
        body { font-family: "Times New Roman", serif; font-size: 12pt; color: #000; line-height: 1.5; }
        .titulo { text-align: center; font-weight: bold; font-size: 16pt; margin-bottom: 20px; }
        .contenido { text-align: justify; text-justify: inter-word; font-size: 10pt; }
        .negrita { font-weight: bold; }
        ul { list-style-type: disc; margin-left: 20px; }
    </style>';

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

    // CONTENIDO
    $fechaEmision = date('d/m/Y', strtotime($regSol['fecha_emision']));

    $html .= '<div class="contenido">';
    $html .= '<div style="text-align: right; margin-bottom: 10px;">Fecha: ' . $fechaEmision . '</div>';

    // Datos del paciente
    $html .= '<div style="margin-bottom: 10px;">';
    $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 style="border: 1px solid #333;">';

    // Tipo de solicitud
    $tipoTexto = '';
    if ($tipo == 'LABORATORIO') {
        $tipoTexto = 'LABORATORIO CLÍNICO';
    } else if ($tipo == 'IMAGENOLOGIA') {
        $tipoTexto = 'IMAGENOLOGÍA';
    } else if ($tipo == 'ESPECIALIZADO') {
        $tipoTexto = 'EXÁMENES ESPECIALIZADOS';
    }

    $html .= '<div style="text-align: center; font-size: 12pt; font-weight: bold; margin: 10px 0;">';
    $html .= $tipoTexto;
    $html .= '</div>';

    // Diagnóstico presuntivo
    if (isset($datos['diagnostico']) && !empty($datos['diagnostico'])) {
        $html .= '<div style="margin: 10px 0;">';
        $html .= '<span class="negrita">DIAGNÓSTICO PRESUNTIVO:</span><br>';
        $html .= nl2br(strtoupper($datos['diagnostico']));
        $html .= '</div>';
    }

    // Contenido específico según tipo
    if ($tipo == 'LABORATORIO') {
        $html .= '<div style="margin: 10px 0;">';
        $html .= '<span class="negrita">CATEGORÍA:</span> ' . (isset($datos['categoria']) ? $datos['categoria'] : 'N/A') . '<br><br>';
        $html .= '<span class="negrita">EXÁMENES SOLICITADOS:</span><br>';
        if (isset($datos['examenes']) && !empty($datos['examenes'])) {
            $examenes = explode("\n", $datos['examenes']);
            $html .= '<ul>';
            foreach ($examenes as $ex) {
                if (trim($ex) != '') {
                    $html .= '<li>' . strtoupper(trim($ex)) . '</li>';
                }
            }
            $html .= '</ul>';
        }
        $html .= '</div>';

    } else if ($tipo == 'IMAGENOLOGIA') {
        $html .= '<div style="margin: 10px 0;">';
        $html .= '<span class="negrita">TIPO DE ESTUDIO:</span> ' . (isset($datos['tipo_estudio']) ? str_replace('_', ' ', $datos['tipo_estudio']) : 'N/A') . '<br>';
        $html .= '<span class="negrita">REGIÓN ANATÓMICA:</span> ' . (isset($datos['region_anatomica']) ? strtoupper($datos['region_anatomica']) : 'N/A') . '<br>';
        if (isset($datos['especificaciones']) && !empty($datos['especificaciones'])) {
            $html .= '<span class="negrita">ESPECIFICACIONES:</span> ' . strtoupper($datos['especificaciones']) . '<br>';
        }
        $html .= '</div>';

    } else if ($tipo == 'ESPECIALIZADO') {
        $html .= '<div style="margin: 10px 0;">';
        $html .= '<span class="negrita">TIPO DE EXAMEN:</span> ' . (isset($datos['tipo_examen']) ? $datos['tipo_examen'] : 'N/A') . '<br>';
        if (isset($datos['especificaciones']) && !empty($datos['especificaciones'])) {
            $html .= '<span class="negrita">ESPECIFICACIONES:</span><br>';
            $html .= nl2br(strtoupper($datos['especificaciones']));
        }
        $html .= '</div>';
    }

    // Indicaciones clínicas
    if (isset($datos['indicaciones']) && !empty($datos['indicaciones'])) {
        $html .= '<div style="margin: 10px 0;">';
        $html .= '<span class="negrita">INDICACIONES CLÍNICAS:</span><br>';
        $html .= nl2br($datos['indicaciones']);
        $html .= '</div>';
    }

    $html .= '<br>';
    $html .= '<p style="margin: 5px 0;">Solicito comedidamente se realicen los exámenes indicados.</p>';
    $html .= '<p class="negrita" style="margin: 5px 0;">Atentamente</p>';
    $html .= '</div>';

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

    // FIRMA ELECTRÓNICA
    if (!empty($paramsFirma)) {
        if (!isset($paramsFirma['rutaCert']) || !file_exists($paramsFirma['rutaCert'])) {
            throw new Exception("El archivo del certificado digital no se encuentra en la ruta temporal.");
        }

        $certificadoContent = file_get_contents($paramsFirma['rutaCert']);
        $certs = [];
        if (openssl_pkcs12_read($certificadoContent, $certs, $paramsFirma['password'])) {
            // 1. Firma Digital (Metadatos internos del PDF)
            $pdf->setSignature($certs['cert'], $certs['pkey'], $paramsFirma['password'], '', 2, $paramsFirma['info']);

            // QR oficial
            $x_firma = 50;
            $y_firma = $pdf->GetY() + 15;
            if ($y_firma > 230)
                $y_firma = 230;

            $styleQR = array(
                'border' => false,
                'vpadding' => 0,
                'hpadding' => 0,
                'fgcolor' => array(0, 0, 0),
                'bgcolor' => false,
                'module_width' => 1,
                'module_height' => 1,
                'position' => 'N'
            );
            // QR con datos de texto
            $fechaFirma = date('Y-m-d H:i:s');
            $qrText = "FIRMADO POR: " . strtoupper($paramsFirma['info']['medico']) . "\n";
            $qrText .= "RAZON: " . $paramsFirma['info']['razon'] . "\n";
            $qrText .= "FECHA: " . $fechaFirma . "\n";
            $qrText .= "VALIDAR CON: firmadigital.gob.ec";

            $pdf->write2DBarcode($qrText, 'QRCODE,H', $x_firma, $y_firma, 24, 24, $styleQR, 'N');

            // 2. Texto de firma
            $pdf->SetTextColor(0, 0, 0);
            $pdf->SetFont('courier', '', 9);
            $pdf->SetXY($x_firma + 25, $y_firma + 2);
            $pdf->Cell(0, 0, "Firmado electrónicamente por:", 0, 0, 'L');

            $pdf->SetFont('courier', 'B', 13);
            $pdf->SetXY($x_firma + 25, $y_firma + 6);
            $pdf->MultiCell(110, 5, strtoupper($paramsFirma['info']['medico']), 0, 'L', false);

            $pdf->SetFont('courier', '', 8);
            $pdf->SetXY($x_firma + 25, $y_firma + 18);
            $pdf->Cell(0, 0, "Validar únicamente con FirmaEC", 0, 0, 'L');
        } else {
            throw new Exception("La contraseña del certificado digital es incorrecta o el archivo está dañado.");
        }
    }

    $baseDir = dirname(__DIR__);
    $carpetaSolicitudes = $baseDir . '/files/solicitudes';

    // Crear carpeta si no existe
    if (!file_exists($carpetaSolicitudes)) {
        mkdir($carpetaSolicitudes, 0755, true);
    }

    $rutaPDF = $carpetaSolicitudes . '/temp_solicitud_' . $idsolicitud . '.pdf';
    $pdf->Output($rutaPDF, 'F');
    return $rutaPDF;
}
?>