<?php
/**
 * Generador de PDF para Recetas Médicas
 * Convierte el HTML de receta.php a PDF usando TCPDF
 */

require_once __DIR__ . "/../config/Conexion.php";
// Verificación robusta de modelo Persona
if (!class_exists('Persona')) {
    require_once __DIR__ . "/../modelos/Persona.php";
}

/**
 * Función local para cargas segura de TCPDF (Si no se cargó externamente)
 */
if (!function_exists('cargarTCPDFReceta')) {
    function cargarTCPDFReceta()
    {
        if (class_exists('TCPDF')) {
            return true;
        }

        $baseDir = dirname(__DIR__);
        $tcpdfFile = '';

        $posibles_rutas = [
            '/home/histkjpq/public_html/tcpdf/tcpdf.php',
            $baseDir . '/public/tcpdf/tcpdf.php',
            $baseDir . '/../public/tcpdf/tcpdf.php',
            __DIR__ . '/../public/tcpdf/tcpdf.php'
        ];

        foreach ($posibles_rutas as $ruta) {
            if (file_exists($ruta)) {
                $tcpdfFile = $ruta;
                break;
            }
        }

        if (!$tcpdfFile) {
            $busqueda = glob($baseDir . '/public/*/tcpdf.php');
            $tcpdfFile = !empty($busqueda) ? $busqueda[0] : '';
        }

        if ($tcpdfFile && file_exists($tcpdfFile)) {
            require_once($tcpdfFile);
            return true;
        }

        return false;
    }
}

/**
 * Generar contenido HTML de la receta
 * @param int $idatencion ID de la atención médica
 * @return string HTML de la receta
 */
function generarHTMLReceta($idatencion, $datos_json = null)
{
    $persona = new Persona();
    $rspta = $persona->imprimirHistoria($idatencion);
    $reg = $rspta->fetch_object();

    if (!$reg) {
        $reg = new stdClass(); // Objeto vacío para evitar fatal error
        $reg->especialista = '';
        $reg->num_documento = '';
        $reg->registro_senescyt = '';
        $reg->paciente = '';
        $reg->edad = '';
        $reg->vigencia = '';
        $reg->tratamiento = '';
        $reg->signnose_de_alarma = '';
        $reg->Indicaciones_no_farmacologicas = '';
        $reg->fecha = date('Y-m-d');
    } else {
        // SANITIZACIÓN
        $reg->especialista = $reg->especialista ?? '';
        $reg->num_documento = $reg->num_documento ?? '';
        $reg->registro_senescyt = $reg->registro_senescyt ?? '';
        $reg->paciente = $reg->paciente ?? '';
        $reg->edad = $reg->edad ?? '';
        $reg->vigencia = $reg->vigencia ?? '';
        $reg->tratamiento = $reg->tratamiento ?? '';
        $reg->signnose_de_alarma = $reg->signnose_de_alarma ?? '';
        $reg->Indicaciones_no_farmacologicas = $reg->Indicaciones_no_farmacologicas ?? '';
        $reg->fecha = $reg->fecha ?? date('Y-m-d');
    }

    // ---------------------------------------------------------
    // INTEGRACIÓN JSON (Recuperar datos de formulario batch)
    // ---------------------------------------------------------
    $medsDesdeJson = [];
    if ($datos_json) {
        $raw = json_decode($datos_json, true);
        if (is_array($raw)) {
            $dataMap = [];
            foreach ($raw as $item) {
                if (isset($item['name'])) {
                    $k = $item['name'];
                    $v = $item['value'];
                    if (substr($k, -2) === '[]') {
                        $keyClean = substr($k, 0, -2);
                        $dataMap[$keyClean][] = $v;
                    } else {
                        $dataMap[$k] = $v;
                    }
                } else if (!is_numeric($item)) {
                    // Logica simple k=>v
                    if (is_array($item)) {
                        // caso raro
                    } else {
                        $dataMap = array_merge($dataMap, $raw);
                        break;
                    }
                }
            }
            if (isset($raw['medicamento']))
                $dataMap = array_merge($dataMap, $raw);

            if (isset($dataMap['tratamiento']))
                $reg->tratamiento = $dataMap['tratamiento'];
            if (isset($dataMap['signnose_de_alarma']))
                $reg->signnose_de_alarma = $dataMap['signnose_de_alarma'];
            if (isset($dataMap['Indicaciones_no_farmacologicas']))
                $reg->Indicaciones_no_farmacologicas = $dataMap['Indicaciones_no_farmacologicas'];
            if (isset($dataMap['vigencia']))
                $reg->vigencia = $dataMap['vigencia'];

            if (isset($dataMap['medicamento']) && is_array($dataMap['medicamento'])) {
                $count = count($dataMap['medicamento']);
                for ($i = 0; $i < $count; $i++) {
                    $obj = new stdClass();
                    $obj->medicamento = $dataMap['medicamento'][$i] ?? '';
                    $obj->concentracion = $dataMap['concentracion'][$i] ?? '';
                    $obj->presentacion = $dataMap['presentacion'][$i] ?? '';
                    $obj->via_administracion = $dataMap['via_administracion'][$i] ?? '';
                    $obj->cantidad = $dataMap['cantidad'][$i] ?? '';
                    $obj->posologia = $dataMap['posologia'][$i] ?? '';
                    $obj->dosis = '';
                    $obj->duracion = '';
                    $medsDesdeJson[] = $obj;
                }
            }
        }
    }
    // ---------------------------------------------------------

    $rspta3 = $persona->imprimirDetalleHistoria($idatencion);

    $codigo = '';
    $enfermedades = array();
    while ($diag = $rspta3->fetch_object()) {
        $codigoDiag = $diag->codigo ?? '';
        $enfermedadDiag = $diag->enfermedad ?? '';
        $codigo .= strtoupper($codigoDiag) . ', ';
        $enfermedades[] = strtoupper($enfermedadDiag);
    }
    $codigo = rtrim($codigo, ', ');

    if (empty($codigo) && isset($dataMap['codigos_cie10']) && is_array($dataMap['codigos_cie10'])) {
        $codigo = implode(', ', $dataMap['codigos_cie10']);
        if (isset($dataMap['enfermedades_cie10'])) {
            $enfermedades = $dataMap['enfermedades_cie10'];
        }
    }

    if (empty($codigo) && empty($enfermedades)) {
        $codigo = "SIN DIAGNÓSTICO REGISTRADO";
        $enfermedades[] = "ADVERTENCIA: GENERADO SIN DIAGNÓSTICO CIE-10";
    }

    $diagnosticosHtml = '';
    foreach ($enfermedades as $enf) {
        $diagnosticosHtml .= '<div style="font-size: 8px; margin: 1px 0;">' . $enf . '</div>';
    }

    $listaMedicamentos = '';
    $contador = 1;

    $listaDeMedicamentos = [];
    if (empty($medsDesdeJson)) {
        $rspta2 = $persona->imprimirReceta($idatencion);
        while ($r = $rspta2->fetch_object()) {
            $listaDeMedicamentos[] = $r;
        }
    } else {
        $listaDeMedicamentos = $medsDesdeJson;
    }

    foreach ($listaDeMedicamentos as $reg2) {
        $via = $reg2->via_administracion ?? 'N/A';
        $posologia = $reg2->posologia ?? 'N/A';
        $concentracion = $reg2->concentracion ?? 'N/A';
        $medicamento = $reg2->medicamento ?? '';
        $presentacion = $reg2->presentacion ?? '';
        $cantidad = $reg2->cantidad ?? '';

        // Estilo exacto basado en receta.php pero optimizado para PDF
        $listaMedicamentos .= '
        <div style="margin-bottom: 5px; padding: 3px; border-left: 3px solid #4CAF50; background-color: #f9f9f9;">
            <table border="0" cellpadding="0" cellspacing="0" width="100%">
                <tr>
                    <td width="10%"><b style="font-size: 8px;">' . $contador . '. CANT:</b> <span style="font-size: 9px;">' . $cantidad . '</span></td>
                    <td width="90%"><b style="font-size: 8px;">MEDICAMENTO:</b> <span style="font-size: 9px;">' . strtoupper($medicamento) . '</span></td>
                </tr>
                <tr>
                    <td colspan="2"><b style="font-size: 8px;">FORMA:</b> <span style="font-size: 8px;">' . strtoupper($presentacion) . '</span> | <b style="font-size: 8px;">CONC:</b> <span style="font-size: 8px;">' . strtoupper($concentracion) . '</span> | <b style="font-size: 8px;">VIA:</b> <span style="font-size: 8px;">' . strtoupper($via) . '</span></td>
                </tr>
                <tr>
                    <td colspan="2"><b style="font-size: 8px;">POSOLOGÍA:</b> <span style="font-size: 9px; color: #444;">' . $posologia . '</span></td>
                </tr>
            </table>
        </div>';
        $contador++;
    }

    // singleReceta HTML reconstruido fielmente al original receta.php
    $singleReceta = '
        <table class="custom-table" border="0" style="padding-right: 5px; width: 100%;">
            <tr>
                <td colspan="2">
                    <img src="../public/img/banner.png" class="center-image" style="width: 100mm; height: auto;">
                </td>
            </tr>
            <tr class="first-description" style="background-color: #f0f0f0;">
                <td width="50%" style="font-size: 9px;">
                    <b>MEDICO: </b> ' . strtoupper($reg->especialista) . '<br>
                    <b>CEDULA: </b> ' . strtoupper($reg->num_documento) . '<br>
                    <b>REG. SENESCYT: </b> ' . (isset($reg->registro_senescyt) ? $reg->registro_senescyt : 'N/A') . '
                </td>
                <td width="50%" style="font-size: 9px;">
                    <b>PACIENTE: </b> ' . $reg->paciente . '<br>
                    <b>EDAD: </b> ' . $reg->edad . '
                </td>
            </tr>
            <tr><td colspan="2" style="font-size: 2px;">&nbsp;</td></tr>
            <tr class="description">
                <td colspan="2" style="border-bottom: 1px solid #ccc;">
                    <b style="font-size: 9px;">CIE10: </b> <span style="font-size: 9px;">' . $codigo . '</span>
                </td>
            </tr>
            <tr class="description">
                <td colspan="2">
                    <b style="font-size: 9px;">DIAGNOSTICO:</b>
                    ' . $diagnosticosHtml . '
                </td>
            </tr>
            <tr>
                <td colspan="2" style="background-color: #e8f5e9; padding: 2px;">
                    <b style="font-size: 9px;">VIGENCIA:</b> <span style="font-size: 9px;">' . $reg->vigencia . '</span>
                </td>
            </tr>
            <tr>
                <td colspan="2" style="padding-top: 5px; padding-bottom: 5px;">
                    ' . $listaMedicamentos . '
                </td>
            </tr>
            <tr>
                <td colspan="2" style="border-top: 1px solid #ccc; padding-top: 5px;">
                    <b style="font-size: 9px;">INDICACIONES:</b><br><span style="font-size: 8px;">' . str_replace("\n", "<br>", $reg->tratamiento) . '</span><br>
                    <b style="font-size: 9px;">SIGNOS DE ALARMA:</b><br><span style="font-size: 8px;">' . str_replace("\n", "<br>", $reg->signnose_de_alarma) . '</span><br>
                    <b style="font-size: 9px;">NO FARMACOLOGICO:</b><br><span style="font-size: 8px;">' . str_replace("\n", "<br>", $reg->Indicaciones_no_farmacologicas) . '</span>
                </td>
            </tr>
            <tr>
                <td colspan="2" style="height: 40px;">
                    <!-- Espacio Firma -->
                </td>
            </tr>
            <tr>
                <td style="font-size: 8px;">
                    Fecha: ' . $reg->fecha . '
                </td>
                <td style="font-size: 8px; text-align: right;">
                    Receta #: ' . $idatencion . '
                </td>
            </tr>
        </table>
    ';

    $html = '
    <!DOCTYPE html>
    <html lang="es">
    <head>
        <meta charset="utf-8">
        <style>
            body { font-family: Arial, sans-serif; }
            .first-description { background-color: #f0f0f0; }
        </style>
    </head>
    <body>
        <table border="0" cellpadding="0" cellspacing="0" width="100%">
            <tr>
                <td width="48%" style="border-right: 1px dashed #999; padding-right: 15px;">
                    ' . $singleReceta . '
                </td>
                <td width="4%"></td>
                <td width="48%" style="padding-left: 15px;">
                    ' . $singleReceta . '
                </td>
            </tr>
        </table>
    </body>
    </html>';

    return $html;
}

function generarPDFReceta($idatencion, $datos_json = null, $paramsFirma = [])
{
    if (ob_get_length())
        ob_clean();

    $html = generarHTMLReceta($idatencion, $datos_json);
    $baseDir = dirname(__DIR__);

    // Crear directorio temporal si no existe
    $dirTemp = $baseDir . '/files/recetas_temp/';
    if (!file_exists($dirTemp)) {
        if (!mkdir($dirTemp, 0755, true)) {
            error_log("Error fatal: No se pudo crear directorio $dirTemp");
            return null;
        }
    }

    $rutaPDF = $dirTemp . 'receta_' . $idatencion . '_' . time() . '.pdf';

    // Cargar TCPDF
    if (!cargarTCPDFReceta()) {
        error_log("Error fatal: TCPDF no encontrado en generarPDFReceta");
        return null;
    }

    // CONFIGURACIÓN A4 HORIZONTAL (297mm x 210mm)
    try {
        $pdf = new TCPDF('L', 'mm', 'A4', true, 'UTF-8', false);
        $pdf->SetCreator('Sistema Médico');
        $pdf->SetAuthor('Sistema Médico');
        $pdf->SetTitle('Receta Médica #' . $idatencion);
        $pdf->setPrintHeader(false);
        $pdf->setPrintFooter(false);

        // Márgenes optimizados para A4 Horizontal
        $pdf->SetMargins(8, 8, 8);
        $pdf->SetAutoPageBreak(TRUE, 15);
        $pdf->AddPage();

        // Convertir imagen del banner a ruta absoluta para TCPDF
        $bannerAbsPath = $baseDir . '/public/img/banner.png';
        if (file_exists($bannerAbsPath)) {
            $html = str_replace('../public/img/banner.png', $bannerAbsPath, $html);
        }

        // Escribir el contenido HTML
        $pdf->writeHTML($html, true, false, true, false, '');

        // --- ESTAMPAR FIRMA DIGITAL (DOBLE QR, UNO POR CADA COPIA) ---
        if (!empty($paramsFirma) && isset($paramsFirma['rutaCert']) && file_exists($paramsFirma['rutaCert'])) {
            $certificadoContent = file_get_contents($paramsFirma['rutaCert']);
            $certs = [];
            if (openssl_pkcs12_read($certificadoContent, $certs, $paramsFirma['password'])) {
                // Firma Digital Real
                $pdf->setSignature($certs['cert'], $certs['pkey'], $paramsFirma['password'], '', 2, $paramsFirma['info']);

                $y_firma = 165;
                $offsetsX = [40, 188];

                foreach ($offsetsX as $x_firma) {
                    $styleQR = array('border' => false, 'vpadding' => 0, 'hpadding' => 0, 'fgcolor' => array(0, 0, 0), 'bgcolor' => false, 'module_width' => 1, 'module_height' => 1);
                    $fechaFirma = date('Y-m-d H:i:s');
                    $qrText = "FIRMADO POR: " . strtoupper($paramsFirma['info']['medico']) . "\nRAZON: " . $paramsFirma['info']['razon'] . "\nFECHA: " . $fechaFirma . "\nVALIDAR CON: firmadigital.gob.ec";

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

                    $pdf->SetTextColor(0, 0, 0);
                    $pdf->SetFont('courier', '', 7);
                    $pdf->SetXY($x_firma + 24, $y_firma);
                    $pdf->Cell(0, 3, "Firmado electrónicamente por:", 0, 0, 'L');

                    $pdf->SetFont('courier', 'B', 9);
                    $pdf->SetXY($x_firma + 24, $y_firma + 4);
                    $pdf->MultiCell(60, 4, strtoupper($paramsFirma['info']['medico']), 0, 'L', false);

                    $pdf->SetFont('courier', '', 6);
                    $pdf->SetXY($x_firma + 24, $y_firma + 14);
                    $pdf->Cell(0, 3, "Validar únicamente con FirmaEC", 0, 0, 'L');
                }
            }
        }

        // Guardar PDF
        $pdf->Output($rutaPDF, 'F');
        return $rutaPDF;

    } catch (Exception $e) {
        error_log("TCPDF Exception: " . $e->getMessage());
        return null;
    }
}
?>