<?php
ob_start();
session_start();

if (!isset($_SESSION["nombre"])) {
    header("Location: ../vistas/login.html");
} else {
    require_once "../modelos/Certificado.php";
    require_once "../modelos/Persona.php";
    require_once "../modelos/FirmadorPDF.php";

    $certificado = new Certificado();
    $iddocumento = isset($_GET["iddocumento"]) ? $_GET["iddocumento"] : "";

    if (empty($iddocumento)) {
        echo "No se ha especificado un documento.";
        exit;
    }

    $rspta = $certificado->mostrar($iddocumento);
    if (empty($rspta)) {
        echo "Documento no encontrado.";
        exit;
    }

    $regCert = $rspta; // Array o Objeto
    $datos = json_decode($regCert['contenido'], true);

    // DEBUG: Mostrar error si JSON es null
    if (json_last_error() !== JSON_ERROR_NONE) {
        echo "<div style='background:red;color:white;padding:10px;'>ERROR JSON DECODE: " . json_last_error_msg() . "</div>";
        echo "<div style='background:orange;padding:10px;'>CONTENIDO RAW: " . htmlspecialchars($regCert['contenido']) . "</div>";
    }
    // DEBUG: Ver datos recibidos (Solo para pruebas, quitar luego)
    // var_dump($datos); 

    $idpersona = $regCert['idpersona'];
    $tipo = $regCert['tipo'];

    // Obtener datos paciente
    $persona = new Persona();
    $regPaciente = $persona->mostrar($idpersona); // Usamos mostrar basico o cabecera
    // Para asegurar compatibilidad con lo que espera el generador visual, usamos metodo seguro
    $regFull = $persona->imprimirDatosPaciente($idpersona);
    $reg = (object) $regFull;

    // Obtener datos del médico (Creador o Firmante)
    // Si ya está firmado, usamos idempleado_firma. Si no, usamos el creador idempleado.
    $idMedico = ($regCert['firmado'] == 1 && $regCert['idempleado_firma']) ? $regCert['idempleado_firma'] : $regCert['idempleado'];

    require_once "../modelos/Usuario.php";
    $usuarioModel = new Usuario();
    $regMedico = $usuarioModel->mostrar($idMedico);

    // Preparar nombre médico completo
    $nombreMedico = strtoupper($regMedico['nombre'] . ' ' . $regMedico['apaterno'] . ' ' . $regMedico['amaterno']);
    $cedulaMedico = $regMedico['num_documento'];
    $registroSenescyt = isset($regMedico['registro_senescyt']) ? $regMedico['registro_senescyt'] : '...........';

    // Preparar textos
    // Fecha Emisión con Hora
    $fechaEmisionTimestamp = strtotime($regCert['fecha_emision']); // fecha_emision en BD suele ser DATETIME
    // Si en BD es solo DATE, necesitamos la fecha de registro o usar current si es nuevo. 
    // Asumamos que fecha_emision es DATE. Si queremos hora, usaremos fecha_registro o current timestamp para la vista si es reciente.
    // Revisando CREATE TABLE: fecha_emision DATE DEFAULT NULL, fecha_registro DATETIME.
    // Usaremos fecha_registro para la hora si está disponible.
    $fechaHoraEmision = '';
    if ($regCert['fecha_registro']) {
        $fechaHoraEmision = date('d/m/Y H:i', strtotime($regCert['fecha_registro']));
    } else {
        $fechaHoraEmision = date('d/m/Y H:i');
    }

    // Texto del Médico
    // "Yo, NOMBRE COMPLETO DEL MEDICO, con cedula # NUMERO DE CEDULA y Registro Senscyt NUMERO DE REGISTRO..."
    $textoIntroduccion = '<p style="text-indent: 40px;">Yo, <span class="negrita">' . $nombreMedico . '</span>, con cédula de ciudadanía N° <span class="negrita">' . $cedulaMedico . '</span> y Registro SENESCYT N° <span class="negrita">' . $registroSenescyt . '</span>, certifico haber atendido al paciente <span class="negrita">' . strtoupper($reg->paciente) . '</span>, portador del documento de identidad N° <span class="negrita">' . $reg->num_documento . '</span>, de <span class="negrita">' . (isset($reg->edad) ? $reg->edad : 'N/A') . '</span> de edad, sexo ' . $reg->sexo . '.</p>';

    // Diagnosticos
    $diagnosticos = "";
    if (isset($datos['diagnosticos_texto'])) {
        // Usar preg_split para asegurar compatibilidad con \r\n, \r o \n
        $lines = preg_split("/\r\n|\n|\r/", $datos['diagnosticos_texto']);
        foreach ($lines as $l) {
            if (trim($l) != '') {
                $diagnosticos .= "<li style='margin-bottom: 5px;'>" . strtoupper($l) . "</li>";
            }
        }
    }

    // Contenido QR
    // TEXTO PLANO EXACTO
    $qrData = "FIRMADO POR: " . $nombreMedico . "\n";
    $qrData .= "FECHA: " . date('d/m/Y', strtotime($regCert['fecha_registro'] ? $regCert['fecha_registro'] : date('Y-m-d'))) . "\n";
    $qrData .= "HORA: " . date('H:i', strtotime($regCert['fecha_registro'] ? $regCert['fecha_registro'] : date('H:i'))) . "\n";
    $qrData .= "VALIDAR EN: firmadigital.gob.ec";

    // Usar urlencode para pasar el texto a la API, pero el resultado escaneado será el texto decodificado
    $qrUrl = "https://api.qrserver.com/v1/create-qr-code/?size=150x150&data=" . urlencode($qrData);

    ?>
    <!DOCTYPE html>
    <html lang="es">

    <head>
        <meta charset="utf-8">
        <title>Certificado Médico - Vista Previa</title>
        <link rel="stylesheet" href="../public/css/bootstrap.min.css">
        <link rel="stylesheet" href="../public/css/font-awesome.css">
        <style>
            body {
                font-family: "Times New Roman", serif;
                background: #f0f0f0;
                padding: 10px;
            }

            .hoja-a4 {
                background: white;
                width: 210mm;
                min-height: 297mm;
                margin: 0 auto;
                padding: 8mm 15mm;
                box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
                position: relative;
                line-height: 1.4;
            }

            .titulo {
                text-align: center;
                font-weight: bold;
                font-size: 16pt;
                margin-bottom: 30px;
                text-decoration: underline;
            }

            .contenido {
                text-align: justify;
                font-size: 9.5pt;
                line-height: 1.4;
            }

            .negrita {
                font-weight: bold;
            }

            ul {
                list-style-type: disc;
                padding-left: 40px;
            }

            .firma-box {
                text-align: center;
                margin-top: 20px;
            }

            @media print {
                .controles {
                    display: none;
                }

                body {
                    background: white;
                    padding: 0;
                }

                .hoja-a4 {
                    box-shadow: none;
                    margin: 0;
                    width: 100%;
                }
            }
        </style>
    </head>

    <body>

        <div class="hoja-a4">
            <!-- Banner -->
            <div style="text-align: center; margin-bottom: 8px;">
                <img src="../public/img/banner.png" style="max-width: 100%; height: auto;">
            </div>

            <div class="titulo">CERTIFICADO MÉDICO</div>
            <br>

            <div class="contenido">
                <?php

                // LOGICA DE VISUALIZACION SEGUN TIPO
                if ($tipo == 'REPOSO') {
                    // VARIABLES
                    $lugar = isset($datos['lugar_emision']) && !empty($datos['lugar_emision']) ? $datos['lugar_emision'] : 'Guayaquil';
                    $contingencia = isset($datos['contingencia']) ? $datos['contingencia'] : 'Enfermedad General';
                    $servicio = isset($datos['servicio']) ? $datos['servicio'] : 'Urgencia';
                    $empresa = isset($datos['empresa']) && !empty($datos['empresa']) ? $datos['empresa'] : '.......................................';
                    $puesto = isset($datos['puesto_trabajo']) && !empty($datos['puesto_trabajo']) ? $datos['puesto_trabajo'] : '.......................................';
                    $sintomas = isset($datos['sintomas']) && !empty($datos['sintomas']) ? $datos['sintomas'] : '.......................................';
                    $enfermedadVal = isset($datos['enfermedad_val']) && !empty($datos['enfermedad_val']) ? $datos['enfermedad_val'] : '.......................................';
                    $descripcion = isset($datos['descripcion']) && !empty($datos['descripcion']) ? $datos['descripcion'] : '..............................................................................';

                    $dias = isset($datos['dias']) ? $datos['dias'] : 1;
                    $fechaInicio = isset($datos['fecha_inicio']) ? $datos['fecha_inicio'] : date('Y-m-d');
                    $fechaFin = isset($datos['fecha_fin']) ? $datos['fecha_fin'] : date('Y-m-d');

                    // Formateadores de fecha simples
                    function fechaLetras($fecha)
                    {
                        $timestamp = strtotime($fecha);
                        $meses = ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'];
                        $dia = date('d', $timestamp);
                        $mes = $meses[date('n', $timestamp) - 1];
                        $anio = date('Y', $timestamp);
                        return "$dia de $mes de $anio";
                    }

                    // CABECERA IESS (Ciudad, Fecha, Hora)
                    echo '<div style="margin-bottom: 4px; font-weight: bold; font-size: 8pt;">
                            <span style="float:left;">' . $lugar . ', ' . fechaLetras($regCert['fecha_registro'] ? $regCert['fecha_registro'] : date('Y-m-d')) . '</span>
                            <span style="float:right;">' . date('H:i a', strtotime($regCert['fecha_registro'] ? $regCert['fecha_registro'] : date('H:i'))) . '</span>
                            <div style="clear:both;"></div>
                          </div>';

                    echo '<div style="text-align: center; font-weight: bold; font-size: 10pt; margin-bottom: 4px; text-decoration: none;">CERTIFICADO MÉDICO</div>';

                    // TABLA DE DATOS (Estilo IESS)
                    echo '<div style="line-height: 1.3; font-size: 8pt; text-align: left;">';

                    // Fila Contingencia
                    echo '<div><span class="negrita" style="display:inline-block; width: 350px;">TIPO DE CONTINGENCIA:</span> ' . $contingencia . '</div>';
                    echo '<div><span class="negrita" style="display:inline-block; width: 350px;">SERVICIO DE:</span> ' . $servicio . '</div>';

                    // Fila Paciente
                    echo '<div><span class="negrita" style="display:inline-block; width: 350px;">APELLIDOS Y NOMBRES COMPLETOS DEL AFILIADO:</span> ' . strtoupper($reg->paciente) . '</div>';
                    echo '<div><span class="negrita" style="display:inline-block; width: 350px;">DIRECCION DOMICILIARIA DEL PACIENTE:</span> ' . ($reg->direccion ? $reg->direccion : '.................................') . '</div>';
                    echo '<div><span class="negrita" style="display:inline-block; width: 350px;">NUMERO TELEFONICO DEL PACIENTE:</span> ' . ($reg->telefono ? $reg->telefono : '.................................') . '</div>';

                    // Fila Trabajo
                    echo '<div><span class="negrita" style="display:inline-block; width: 350px;">INSTITUCION / EMPRESA:</span> ' . $empresa . '</div>';
                    echo '<div><span class="negrita" style="display:inline-block; width: 350px;">PUESTO DE TRABAJO DEL PACIENTE:</span> ' . $puesto . '</div>';

                    // Fila Identificacion
                    echo '<div><span class="negrita" style="display:inline-block; width: 350px;">NUMERO DE CEDULA DE IDENTIDAD:</span> ' . $reg->num_documento . '</div>';
                    echo '<div><span class="negrita" style="display:inline-block; width: 350px;">HISTORIA CLINICA:</span> ' . str_pad($regCert['idpersona'], 4, "0", STR_PAD_LEFT) . '</div>';

                    // Diagnosticos
                    // Intentar separar
                    $cie10Lista = [];
                    $diagLista = [];
                    if (isset($datos['diagnosticos_texto'])) {
                        $lines = preg_split("/\r\n|\n|\r/", $datos['diagnosticos_texto']);
                        foreach ($lines as $l) {
                            if (trim($l) == '')
                                continue;
                            // Intento separar CODIGO - NOMBRE
                            if (preg_match('/^([A-Z][0-9][0-9X]?\.?[0-9]?)\s+-\s+(.*)/', $l, $matches)) {
                                $cie10Lista[] = $matches[1] . ' ' . $matches[2]; // Codigo Nombre
                                $diagLista[] = $matches[2]; // Solo Nombre
                            } else {
                                // Si no sigue el patron, va a diagnostico tal cual
                                $diagLista[] = $l;
                            }
                        }
                    }
                    if (empty($diagLista))
                        $diagLista[] = ".................................";

                    echo '<div><span class="negrita" style="display:inline-block; width: 350px;">DIAGNOSTICO:</span> ' . implode(', ', $diagLista) . '</div>';
                    echo '<div><span class="negrita" style="display:inline-block; width: 350px;">CIE-10:</span> ' . (empty($cie10Lista) ? '.................................' : implode(', ', $cie10Lista)) . '</div>';

                    echo '<div><span class="negrita" style="display:inline-block; width: 350px;">PRESENTA SINTOMAS:</span> ' . $sintomas . '</div>';
                    echo '<div><span class="negrita" style="display:inline-block; width: 350px;">ENFERMEDAD:</span> ' . $enfermedadVal . '</div>';
                    echo '<div><span class="negrita" style="display:inline-block; width: 350px;">DESCRIPCION:</span> ' . nl2br($descripcion) . '</div>';

                    echo '<div><span class="negrita" style="display:inline-block; width: 350px;">TOTAL DE REPOSO MEDICO DE:</span> ' . $dias . ' días</div>';
                    echo '<div><span class="negrita" style="display:inline-block; width: 350px;">DESDE:</span> ' . $fechaInicio . ' &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' . fechaLetras($fechaInicio) . '</div>';
                    echo '<div><span class="negrita" style="display:inline-block; width: 350px;">HASTA:</span> ' . $fechaFin . ' &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' . fechaLetras($fechaFin) . '</div>';

                    // Observaciones Extra
                    if (isset($datos['observaciones']) && !empty($datos['observaciones'])) {
                        echo '<br><div><span class="negrita">OBSERVACIONES ADICIONALES:</span><br>' . nl2br($datos['observaciones']) . '</div>';
                    }

                    echo '</div>'; // Fin div datos
            
                    echo '<div style="margin-top: 4px;"></div>';
                    echo '<p class="negrita" style="font-size: 8pt; margin: 2px 0;">Es todo lo que puedo certificar en honor a la verdad, pudiendo hacer uso de este certificado como lo amerite.</p>';
                    echo '<p class="negrita" style="margin: 2px 0; font-size: 8pt;">Atentamente</p>';

                } else {
                    // MODO NORMAL Y OTROS
                    echo $textoIntroduccion;

                    if ($tipo == 'PERSONALIZADO') {
                        echo '<br>';
                        // Primero mostrar observaciones si existen
                        $obs = isset($datos['observaciones']) ? $datos['observaciones'] : '';
                        if (!empty($obs)) {
                            echo '<p>' . nl2br($obs) . '</p>';
                        }
                        // Luego el texto libre si existe
                        $textoLibre = isset($datos['texto_libre']) ? nl2br($datos['texto_libre']) : '';
                        if (!empty($textoLibre)) {
                            echo '<p>' . $textoLibre . '</p>';
                        }
                        echo '<br><p>Documento expedido a petición de la parte interesada para los fines pertinentes.</p>';
                    } else { // MEDICO GENERAL (ESTANDAR)
                        echo '<p>Quien presenta el siguiente diagnóstico (CIE-10):</p>';
                        echo '<ul>' . $diagnosticos . '</ul>';
                        echo '<p>Observaciones e indicaciones:</p>';
                        $obs = isset($datos['observaciones']) ? $datos['observaciones'] : '';
                        echo '<p>' . nl2br($obs) . '</p>';
                        echo '<br><p>Documento expedido a petición de la parte interesada para los fines pertinentes.</p>';
                    }
                }
                ?>
            </div> <!-- Cierre contenido -->

            <br><br>
            <div style="text-align: right; font-size: 8pt; margin: 3px 0;">
                Fecha de Emisión: <?php echo $fechaHoraEmision; ?>
            </div>

            <!-- Area de Firma -->
            <div class="firma-box">
                <?php if ($regCert['firmado'] == 1): ?>
                    <div style="text-align: center;">
                        <div style="display: inline-block; text-align: left; padding: 10px;">
                            <table style="border-collapse: collapse;">
                                <tr>
                                    <td style="padding-right: 15px;">
                                        <?php
                                        $qrText = "FIRMADO POR: " . $nombreMedico . "\n" .
                                            "FECHA: " . date('Y-m-d H:i:s', strtotime($regCert['fecha_firma'])) . "\n" .
                                            "VALIDAR CON: firmadigital.gob.ec";
                                        ?>
                                        <img src="https://api.qrserver.com/v1/create-qr-code/?size=150x150&data=<?php echo urlencode($qrText); ?>"
                                            style="width: 100px; height: 100px; border: 1px solid #eee;" alt="QR FirmaEC">
                                    </td>
                                    <td style="font-family: 'Courier New', Courier, monospace; vertical-align: middle;">
                                        <span style="font-size: 11px;">Firmado electrónicamente por:</span><br>
                                        <span
                                            style="font-size: 14px; font-weight: bold;"><?php echo $nombreMedico; ?></span><br>
                                        <span style="font-size: 10px;">Validar con FirmaEC</span>
                                    </td>
                                </tr>
                            </table>
                        </div>
                        <!-- Botón de descarga eliminado a solicitud del usuario -->
                    </div>
                <?php else: ?>
                    <!-- DISEÑO IMAGEN 1: ACCIÓN PENDIENTE (Igual a receta.php) -->
                    <div
                        style="border: 2px dashed #3c8dbc; border-radius: 15px; padding: 40px; text-align: center; margin: 20px auto; max-width: 80%; display: flex; flex-direction: column; align-items: center; justify-content: center;">
                        <h4 style="font-weight: normal; margin-bottom: 5px;">
                            <i class="fa fa-info-circle"></i> Acción Requerida: Firma Digital
                        </h4>
                        <p style="color: #666; margin-bottom: 25px;">Para otorgar validez legal a este certificado, presione el
                            siguiente botón:</p>
                        <button id="btnFirmarManual" class="btn btn-primary btn-lg"
                            style="padding: 15px 40px; font-size: 20px; border-radius: 4px; background-color: #337ab7; display: inline-block;"
                            onclick="solicitarFirma()">
                            <i class="fa fa-pencil-square-o"></i> FIRMAR CERTIFICADO DIGITALMENTE
                        </button>
                        <p style="margin-top: 15px; color: #777; font-size: 12px;">(Necesitará su certificado .p12 y contraseña)
                        </p>
                    </div>
                <?php endif; ?>
            </div>

        </div>

        <script src="../public/js/jquery-3.1.1.min.js"></script>
        <script src="../public/js/bootbox.min.js"></script>
        <script src="../public/js/bootstrap.min.js"></script>
        <script>
            function solicitarFirma() {
                var iddocumento = "<?php echo $iddocumento; ?>";
                var idempleado = "<?php echo isset($_SESSION['idempleado']) ? $_SESSION['idempleado'] : (isset($_SESSION['idusuario']) ? $_SESSION['idusuario'] : 0); ?>";
                bootbox.prompt({
                    title: "Ingrese la contraseña de su Certificado Digital para firmar",
                    inputType: 'password',
                    callback: function (password) {
                        if (password) {
                            firmarProceso(iddocumento, idempleado, password);
                        }
                    }
                });
            }

            function firmarProceso(iddocumento, idempleado, password) {
                var dialog = bootbox.dialog({
                    message: '<p class="text-center"><i class="fa fa-spin fa-spinner"></i> Firmando certificado digitalmente...</p>',
                    closeButton: false
                });
                $.ajax({
                    url: "../ajax/certificado.php?op=firmar",
                    type: "POST",
                    data: {
                        iddocumento: iddocumento,
                        idempleado: idempleado,
                        password: password
                    },
                    dataType: "json",
                    success: function (response) {
                        dialog.modal('hide');
                        if (response.success) {
                            bootbox.alert("¡Certificado firmado exitosamente!", function () {
                                location.reload();
                            });
                        } else {
                            bootbox.alert("Error: " + response.message);
                        }
                    },
                    error: function () {
                        dialog.modal('hide');
                        bootbox.alert("Error de comunicación con el servidor.");
                    }
                });
            }
        </script>
    </body>

    </html>
    <?php
}
ob_end_flush();
?>