<?php
// GENERADOR DE PDF PARA ODONTOPEDIATRÍA (CORREGIDO - CONTROL MANUAL DE PAGINACIÓN)
// Versión Estable: Coordenadas corregidas y Paginación Estricta

function generarPDFOdontopediatria($idatencion, $json)
{
    // Carga segura de TCPDF
    if (function_exists('cargarTCPDF')) {
        if (!cargarTCPDF())
            die("Error al cargar TCPDF");
    } else {
        if (!class_exists('TCPDF')) {
            $cpanelSharedPath = '/home/' . get_current_user() . '/public_html/tcpdf/tcpdf.php';
            $rutas = ['../public/tcpdf/tcpdf.php', dirname(__DIR__) . '/public/tcpdf/tcpdf.php', $cpanelSharedPath];
            foreach ($rutas as $r)
                if (file_exists($r))
                    require_once($r);
        }
    }

    $p = obtenerDatosPaciente($idatencion);
    $d = json_decode($json, true) ?? [];

    // Normalización de datos
    if (is_array($d) && isset($d[0]['name']) && (isset($d[0]['value']) || array_key_exists('value', $d[0]))) {
        $d_assoc = [];
        foreach ($d as $item) {
            if (isset($item['name'])) {
                $val = $item['value'];
                if (substr($item['name'], -2) === '[]') {
                    $key = substr($item['name'], 0, -2);
                    $d_assoc[$key][] = $val;
                } else {
                    $d_assoc[$item['name']] = $val;
                }
            }
        }
        $d = $d_assoc;
    }

    $pdf = new TCPDF('P', 'mm', 'A4', true, 'UTF-8', false);

    $emisor_meta = function_exists('_mspObtenerEmisor') ? _mspObtenerEmisor() : ['institucion'=>'','profesional'=>''];
    $pdf->SetCreator($emisor_meta['institucion'] ?: 'HC MEDICA');
    $pdf->SetAuthor($emisor_meta['profesional'] ?: ($emisor_meta['institucion'] ?: 'HC MEDICA'));
    $pdf->SetTitle('Formulario 033-P - Odontopediatría');

    // DESACTIVAR SALTO AUTOMÁTICO PARA CONTROL TOTAL
    $pdf->setPrintHeader(false);
    $pdf->setPrintFooter(false);
    $pdf->SetMargins(10, 10, 10);
    $pdf->SetAutoPageBreak(FALSE, 0); // Control manual
    $pdf->SetFont('helvetica', '', 8);

    $pdf->AddPage();

    // Función Helper para verificar espacio y saltar página si es necesario
    $checkPageBreak = function ($hNeeded) use ($pdf) {
        if (($pdf->GetY() + $hNeeded) > 280) { // Margen inferior seguro
            $pdf->AddPage();
            return true;
        }
        return false;
    };

    // Emisor dinámico (cero hardcodeo)
    $emisor = function_exists('_mspObtenerEmisor') ? _mspObtenerEmisor() : [
        'institucion'=>'', 'unidad'=>'', 'ruc'=>'', 'razon_social'=>'',
        'direccion'=>'', 'telefono'=>'', 'email'=>'',
        'profesional'=>'', 'especialidad'=>'', 'senescyt'=>'',
    ];

    // ==========================================
    // 1. ENCABEZADO (sin logo MSP, datos dinámicos)
    // ==========================================
    $pdf->SetFont('helvetica', 'B', 11);
    $pdf->SetXY(10, 10);
    $cabTit = trim($emisor['institucion'] ?: $emisor['razon_social']);
    $pdf->Cell(150, 5, strtoupper($cabTit) . ($emisor['ruc'] ? '   ·   RUC ' . $emisor['ruc'] : ''), 0, 1, 'L');
    $pdf->SetFont('helvetica', '', 8);
    $pdf->SetXY(10, 15);
    $cabSub = trim(
        ($emisor['direccion'] ?: '')
        . ($emisor['telefono'] ? '  ·  Tel. ' . $emisor['telefono'] : '')
        . ($emisor['email'] ? '  ·  ' . $emisor['email'] : '')
    );
    $pdf->Cell(150, 4, $cabSub, 0, 1, 'L');

    $pdf->SetFont('helvetica', 'B', 13);
    $pdf->SetXY(10, 22);
    $pdf->Cell(150, 6, 'HISTORIA CLÍNICA ODONTOPEDIÁTRICA', 0, 1, 'L');

    $pdf->SetFont('helvetica', 'B', 16);
    $pdf->SetXY(170, 12);
    $pdf->SetFillColor(204, 204, 255);
    $pdf->Cell(30, 10, '033-P', 1, 1, 'C', 1);

    $pdf->Ln(10);

    // ==========================================
    // A. DATOS DEL PACIENTE
    // ==========================================
    dibujarTituloSeccionOdonto($pdf, 'A. DATOS DE IDENTIFICACIÓN');

    $pdf->SetFont('helvetica', 'B', 7);
    $pdf->SetFillColor(245, 245, 245);

    $pdf->Cell(35, 5, 'INSTITUCIÓN DEL SISTEMA:', 1, 0, 'L', 1);
    $pdf->SetFont('helvetica', '', 8);
    $pdf->Cell(60, 5, strtoupper($emisor['institucion'] ?: '—'), 1, 0, 'L');

    $pdf->SetFont('helvetica', 'B', 7);
    $pdf->Cell(35, 5, 'UNIDAD OPERATIVA:', 1, 0, 'L', 1);
    $pdf->SetFont('helvetica', '', 8);
    $pdf->Cell(60, 5, strtoupper($emisor['unidad'] ?: '—'), 1, 1, 'L');

    $pdf->SetFont('helvetica', 'B', 7);
    $pdf->Cell(35, 5, 'PACIENTE:', 1, 0, 'L', 1);
    $pdf->SetFont('helvetica', 'B', 9);
    $pdf->Cell(95, 5, strtoupper($p['apaterno'] . ' ' . $p['amaterno'] . ' ' . $p['nombre']), 1, 0, 'L');

    $pdf->SetFont('helvetica', 'B', 7);
    $pdf->Cell(30, 5, 'SEXO (M/F) / EDAD:', 1, 0, 'L', 1);
    $pdf->SetFont('helvetica', '', 8);
    $pdf->Cell(30, 5, $p['sexo'] . ' / ' . $p['edad_completa'], 1, 1, 'C');

    $pdf->SetFont('helvetica', 'B', 7);
    $pdf->Cell(35, 5, 'No. HISTORIA / CÉDULA:', 1, 0, 'L', 1);
    $pdf->SetFont('helvetica', '', 8);
    $pdf->Cell(60, 5, $p['num_documento'], 1, 0, 'L');

    $pdf->SetFont('helvetica', 'B', 7);
    $pdf->Cell(35, 5, 'LUGAR RESIDENCIA:', 1, 0, 'L', 1);
    $pdf->SetFont('helvetica', '', 7);
    $pdf->Cell(60, 5, substr($p['direccion'], 0, 45), 1, 1, 'L');

    $pdf->Ln(2);

    // ==========================================
    // 1. MOTIVO DE CONSULTA
    // ==========================================
    dibujarTituloSeccionOdonto($pdf, '1. MOTIVO DE CONSULTA');
    $pdf->SetFont('helvetica', '', 9);
    $pdf->MultiCell(190, 8, $d['motivo_consulta_odonto'] ?? '', 1, 'L');
    $pdf->Ln(2);

    // ==========================================
    // 2. ENFERMEDAD O PROBLEMA ACTUAL
    // ==========================================
    $checkPageBreak(25);
    dibujarTituloSeccionOdonto($pdf, '2. ENFERMEDAD O PROBLEMA ACTUAL');
    $pdf->SetFont('helvetica', '', 7);
    $pdf->Cell(190, 4, 'Registrar síntomas, cronología, localización, características, intensidad, causa aparente, síntomas asociados, estado actual', 'LR', 1, 'L');
    $pdf->SetFont('helvetica', '', 9);
    $pdf->MultiCell(190, 10, $d['enfermedad_actual_odonto'] ?? '', 'LBR', 'J');
    $pdf->Ln(2);

    // ==========================================
    // 3. ANTECEDENTES
    // ==========================================
    $checkPageBreak(30);
    dibujarTituloSeccionOdonto($pdf, '3. ANTECEDENTES PERSONALES Y FAMILIARES');
    $pdf->SetFont('helvetica', '', 8);

    $lista1 = ['alergia_antibiotico' => '1. Alergia Antib.', 'alergia_anestesia' => '2. Alergia Anest.', 'hemorragias' => '3. Hemorragias', 'vih' => '4. VIHSIDA'];
    $lista2 = ['tuberculosis' => '5. Tuberculosis', 'asma' => '6. Asma', 'diabetes' => '7. Diabetes', 'hipertension' => '8. Hipertensión'];
    $lista3 = ['cardiopatia' => '9. Enf. Cardíaca', 'otros_antecedentes_check' => '10. Otro'];

    if (!function_exists('dibujarFilaChecksOdontoSim')) {
        function dibujarFilaChecksOdontoSim($pdf, $items, $data)
        {
            $pdf->SetFont('helvetica', '', 8);
            foreach ($items as $key => $label) {
                $val = isset($data[$key]) ? 'X' : ' ';
                $pdf->Cell(5, 5, $val, 1, 0, 'C');
                $pdf->Cell(35, 5, ' ' . $label, 0, 0, 'L');
            }
            $pdf->Ln();
        }
    }
    dibujarFilaChecksOdontoSim($pdf, $lista1, $d);
    dibujarFilaChecksOdontoSim($pdf, $lista2, $d);
    dibujarFilaChecksOdontoSim($pdf, $lista3, $d);

    $pdf->SetFont('helvetica', 'B', 8);
    $pdf->Cell(190, 5, 'Otros Antecedentes / Medicación: ' . ($d['otros_antecedentes_odonto'] ?? ''), 'B', 1, 'L');
    $pdf->Ln(2);

    // ==========================================
    // 4. SIGNOS VITALES
    // ==========================================
    $checkPageBreak(15);
    dibujarTituloSeccionOdonto($pdf, '4. SIGNOS VITALES');
    $pdf->SetFont('helvetica', 'B', 8);
    $pdf->Cell(47, 5, 'PRESIÓN ARTERIAL', 1, 0, 'C', 1);
    $pdf->Cell(47, 5, 'FRECUENCIA CARDÍACA', 1, 0, 'C', 1);
    $pdf->Cell(47, 5, 'TEMPERATURA', 1, 0, 'C', 1);
    $pdf->Cell(49, 5, 'FRECUENCIA RESP.', 1, 1, 'C', 1);

    $pdf->SetFont('helvetica', '', 9);
    $pdf->Cell(47, 6, ($d['presion_arterial'] ?? '-') . ' mmHg', 1, 0, 'C');
    $pdf->Cell(47, 6, ($d['frecuencia_cardiaca'] ?? '-') . ' lpm', 1, 0, 'C');
    $pdf->Cell(47, 6, ($d['temperatura'] ?? '-') . ' °C', 1, 0, 'C');
    $pdf->Cell(49, 6, ($d['frecuencia_respiratoria'] ?? '-') . ' rpm', 1, 1, 'C');
    $pdf->Ln(2);

    // ==========================================
    // 4-A. ANTECEDENTES Y CONDUCTA
    // ==========================================
    $checkPageBreak(40);
    dibujarTituloSeccionOdonto($pdf, '4-A. ANTECEDENTES Y CONDUCTA (ODONTOPEDIATRÍA)');

    $pdf->SetFont('helvetica', 'B', 8);
    $pdf->Cell(190, 5, 'Motivo de Consulta (Padres/Tutor):', 0, 1, 'L');
    $pdf->SetFont('helvetica', '', 8);
    $pdf->MultiCell(190, 6, $d['motivo_padres'] ?? '', 1, 'L');
    $pdf->Ln(2);

    $yBase = $pdf->GetY();

    // Habitos
    $pdf->SetXY(10, $yBase);
    $pdf->SetFont('helvetica', 'B', 8);
    $pdf->Cell(90, 5, 'HÁBITOS PERNICIOSOS:', 1, 0, 'L', 1);
    $pdf->Ln();
    $pdf->SetFont('helvetica', '', 7);

    $habitos = [
        'Biberón' => 'habito_biberon',
        'Chupón' => 'habito_chupon',
        'Succión Digital' => 'habito_succion',
        'Bruxismo' => 'habito_bruxismo',
        'Onicofagia' => 'habito_onicofagia',
        'Respirador Oral' => 'habito_respirador'
    ];
    $cols = 0;
    foreach ($habitos as $lbl => $k) {
        $val = isset($d[$k]) ? 'X' : ' ';
        $pdf->Cell(5, 5, $val, 1, 0, 'C');
        $pdf->Cell(25, 5, $lbl, 0, 0, 'L');
        $cols++;
        if ($cols % 3 == 0)
            $pdf->Ln();
    }

    // Conducta
    $xRight = 105;
    $pdf->SetXY($xRight, $yBase);
    $pdf->SetFont('helvetica', 'B', 8);
    $pdf->Cell(90, 5, 'CONDUCTA (FRANKL):', 1, 1, 'L', 1);

    $f = $d['conducta_frankl'] ?? '';
    $frankl = ['F1' => '(--) Definitivamente Negativa', 'F2' => '(-) Negativa', 'F3' => '(+) Positiva', 'F4' => '(++) Definitivamente Positiva'];
    $fY = $yBase + 5;
    $pdf->SetFont('helvetica', '', 7);
    foreach ($frankl as $code => $desc) {
        $chk = ($f == $code) ? 'X' : ' ';
        $pdf->SetXY($xRight, $fY);
        $pdf->Cell(5, 5, $chk, 1, 0, 'C');
        $pdf->Cell(85, 5, $desc, 0, 1, 'L');
        $fY += 5;
    }

    $pdf->SetY(max($pdf->GetY(), $fY) + 2);

    $pdf->SetFont('helvetica', 'B', 8);
    $pdf->Cell(190, 5, 'Experiencias Previas / Última Visita:', 0, 1, 'L');
    $pdf->SetFont('helvetica', '', 8);
    $pdf->MultiCell(190, 6, $d['experiencia_previa'] ?? '', 1, 'L');
    $pdf->Ln(2);

    // ==========================================
    // 5. EXAMEN ESTOMATOGNATICO
    // ==========================================
    $checkPageBreak(25);
    dibujarTituloSeccionOdonto($pdf, '5. EXAMEN DEL SISTEMA ESTOMATOGNÁTICO');
    $pdf->SetFont('helvetica', '', 7);

    $patologias = ['1. Labios' => 'labios_patologia', '2. Mejillas' => 'mejillas_patologia', '3. Maxilar Sup' => 'maxilar_patologia', '4. Maxilar Inf' => 'maxilar_inf_patologia', '5. Lengua' => 'lengua_patologia', '6. Paladar' => 'paladar_patologia'];
    $patologias2 = ['7. Piso' => 'piso_patologia', '8. Carrillos' => 'carrillos_patologia', '9. Glándulas' => 'glandulas_patologia', '10. Oro Faringe' => 'orofaringe_patologia', '11. A.T.M' => 'atm_patologia', '12. Ganglios' => 'ganglios_patologia'];

    foreach ($patologias as $label => $key) {
        $v = isset($d[$key]) ? 'X' : ' ';
        $pdf->Cell(5, 5, $v, 1, 0, 'C');
        $pdf->Cell(25, 5, $label, 0, 0, 'L');
    }
    $pdf->Ln();
    foreach ($patologias2 as $label => $key) {
        $v = isset($d[$key]) ? 'X' : ' ';
        $pdf->Cell(5, 5, $v, 1, 0, 'C');
        $pdf->Cell(25, 5, $label, 0, 0, 'L');
    }
    $pdf->Ln();

    $pdf->SetFont('helvetica', 'B', 8);
    $pdf->Cell(190, 5, 'Descripción:', 0, 1, 'L');
    $pdf->SetFont('helvetica', '', 8);
    $pdf->MultiCell(190, 6, $d['examen_estomatognatico'] ?? '', 1, 'L');
    $pdf->Ln(2);

    // ==========================================
    // 6. ODONTOGRAMA
    // ==========================================
    // Altura necesaria aprox 65mm
    $checkPageBreak(65);
    dibujarTituloSeccionOdonto($pdf, '6. ODONTOGRAMA');
    $pdf->Ln(1);

    $startX = 12;
    $startY = $pdf->GetY() + 14;

    // (Definición función dibujarDienteVectorialOdonto - Mismo código, omitido por brevedad en step 1/2, se incluirá completo)
    if (!function_exists('dibujarDienteVectorialOdonto')) {
        function dibujarDienteVectorialOdonto($pdf, $x, $y, $numero, $datosDiente, $esInferior)
        {
            $s = 8;
            $bx = $x + 1;
            $by = $y + 1;
            $pdf->SetFont('helvetica', 'B', 6);
            if (!$esInferior) {
                $pdf->SetXY($x, $y - 3);
                $pdf->Cell(10, 3, $numero, 0, 0, 'C');
            } else {
                $pdf->SetXY($x, $by + $s);
                $pdf->Cell(10, 3, $numero, 0, 0, 'C');
            }
            // Recuadros
            $pdf->SetLineWidth(0.2);
            $pdf->SetDrawColor(0);
            if (!$esInferior) {
                $pdf->Rect($bx, $y - 6, $s, 3);
                $pdf->Rect($bx, $y - 9, $s, 3);
                $pdf->SetFont('helvetica', '', 5);
                $pdf->SetXY($bx, $y - 6);
                $pdf->Cell($s, 3, $datosDiente['movilidad'] ?? '', 0, 0, 'C');
                $pdf->SetXY($bx, $y - 9);
                $pdf->Cell($s, 3, $datosDiente['recesion'] ?? '', 0, 0, 'C');
            } else {
                $pdf->Rect($bx, $by + $s + 3, $s, 3);
                $pdf->Rect($bx, $by + $s + 6, $s, 3);
                $pdf->SetFont('helvetica', '', 5);
                $pdf->SetXY($bx, $by + $s + 3);
                $pdf->Cell($s, 3, $datosDiente['movilidad'] ?? '', 0, 0, 'C');
                $pdf->SetXY($bx, $by + $s + 6);
                $pdf->Cell($s, 3, $datosDiente['recesion'] ?? '', 0, 0, 'C');
            }

            // Caras
            $getColor = function ($estado) {
                if ($estado == 'caries')
                    return [211, 47, 47];
                if ($estado == 'obturado')
                    return [25, 118, 210];
                return [255, 255, 255];
            };
            $drawPoly = function ($pts, $fillColor) use ($pdf, $bx, $by, $s) {
                $pdf->SetFillColor($fillColor[0], $fillColor[1], $fillColor[2]);
                $absPoly = [];
                for ($i = 0; $i < count($pts); $i += 2) {
                    $absPoly[] = $bx + ($pts[$i] / 100 * $s);
                    $absPoly[] = $by + ($pts[$i + 1] / 100 * $s);
                }
                $pdf->Polygon($absPoly, 'DF');
            };

            $drawPoly([0, 0, 100, 0, 75, 25, 25, 25], $getColor($datosDiente['top'] ?? ''));
            $drawPoly([25, 75, 75, 75, 100, 100, 0, 100], $getColor($datosDiente['bottom'] ?? ''));
            $drawPoly([0, 0, 25, 25, 25, 75, 0, 100], $getColor($datosDiente['left'] ?? ''));
            $drawPoly([100, 0, 100, 100, 75, 75, 75, 25], $getColor($datosDiente['right'] ?? ''));
            $pdf->SetFillColor(...$getColor($datosDiente['center'] ?? ''));
            $pdf->Rect($bx + ($s * 0.25), $by + ($s * 0.25), $s * 0.5, $s * 0.5, 'DF');

            // Simbología extra
            $gen = $datosDiente['general'] ?? '';
            // (Código de simbolos igual, resumido para no exceder)
            if (strpos($gen, 'corona') !== false) {
                $pdf->SetDrawColor(211, 47, 47);
                $pdf->Rect($bx, $by, $s, $s, 'D');
                $pdf->SetDrawColor(0);
            }
            if (strpos($gen, 'extraccion') !== false) {
                $pdf->SetDrawColor(211, 47, 47);
                $pdf->Line($bx, $by, $bx + $s, $by + $s);
                $pdf->Line($bx + $s, $by, $bx, $by + $s);
                $pdf->SetDrawColor(0);
            }
            if (strpos($gen, 'perdida-caries') !== false) {
                $pdf->SetDrawColor(25, 118, 210);
                $pdf->Line($bx, $by, $bx + $s, $by + $s);
                $pdf->Line($bx + $s, $by, $bx, $by + $s);
                $pdf->SetDrawColor(0);
            }
            if (strpos($gen, 'perdida-otra') !== false) {
                $pdf->SetDrawColor(211, 47, 47);
                $pdf->Line($bx, $by, $bx + $s, $by + $s);
                $pdf->Line($bx + $s, $by, $bx, $by + $s);
                $pdf->Circle($bx + $s / 2, $by + $s / 2, $s / 2 + 1, 0, 360, 'D');
                $pdf->SetDrawColor(0);
            }
            if (strpos($gen, 'ausente') !== false) {
                $pdf->SetDrawColor(50, 50, 50);
                $pdf->Line($bx, $by, $bx + $s, $by + $s);
                $pdf->Line($bx + $s, $by, $bx, $by + $s);
                $pdf->SetDrawColor(0);
            }
            if (strpos($gen, 'endodoncia') !== false) {
                $pdf->SetFillColor(211, 47, 47);
                $pdf->Polygon([$bx + $s / 2, $by + $s * 0.2, $bx + $s * 0.8, $by + $s * 0.8, $bx + $s * 0.2, $by + $s * 0.8], 'D', [], [211, 47, 47]);
            }
            if (strpos($gen, 'protesis') !== false) {
                $pdf->SetDrawColor(211, 47, 47);
                $pdf->SetLineWidth(0.5);
                $m = 1.5;
                if (strpos($gen, 'protesis-fija') !== false) {
                    $pdf->Line($bx - $m, $by - $m, $bx + ($s / 3), $by - $m);
                    $pdf->Line($bx - $m, $by - $m, $bx - $m, $by + $s + $m);
                    $pdf->Line($bx - $m, $by + $s + $m, $bx + ($s / 3), $by + $s + $m);
                    $pdf->Line($bx + $s + $m, $by - $m, $bx + $s - ($s / 3), $by - $m);
                    $pdf->Line($bx + $s + $m, $by - $m, $bx + $s + $m, $by + $s + $m);
                    $pdf->Line($bx + $s + $m, $by + $s + $m, $bx + $s - ($s / 3), $by + $s + $m);
                }
                if (strpos($gen, 'protesis-removible') !== false) {
                    $pdf->SetFont('helvetica', 'B', 14);
                    $pdf->SetTextColor(211, 47, 47);
                    $pdf->Text($bx - 2, $by - 1, '(');
                    $pdf->Text($bx + $s - 1, $by - 1, ')');
                    $pdf->SetTextColor(0);
                }
                if (strpos($gen, 'protesis-total') !== false) {
                    $pdf->SetFont('helvetica', 'B', 14);
                    $pdf->SetTextColor(211, 47, 47);
                    $pdf->Text($bx + 1, $by - 2, '=');
                    $pdf->SetTextColor(0);
                }
                $pdf->SetDrawColor(0);
                $pdf->SetLineWidth(0.2);
            }
            if (strpos($gen, 'sellante-nec') !== false) {
                $pdf->SetTextColor(211, 47, 47);
                $pdf->SetFont('helvetica', 'B', 12);
                $pdf->Text($bx + $s / 2 - 1.5, $by + $s / 2 - 2, '*');
                $pdf->SetTextColor(0);
            }
            if (strpos($gen, 'sellante-rea') !== false) {
                $pdf->SetTextColor(25, 118, 210);
                $pdf->SetFont('helvetica', 'B', 12);
                $pdf->Text($bx + $s / 2 - 1.5, $by + $s / 2 - 2, '*');
                $pdf->SetTextColor(0);
            }
        }
    }

    $getDienteData = function ($num) use ($d) {
        $base = 'diente_' . $num;
        return [
            'top' => $d[$base . '_top'] ?? '',
            'bottom' => $d[$base . '_bottom'] ?? '',
            'left' => $d[$base . '_left'] ?? '',
            'right' => $d[$base . '_right'] ?? '',
            'center' => $d[$base . '_center'] ?? '',
            'general' => $d[$base . '_general'] ?? '',
            'recesion' => $d[$base . '_recesion'] ?? '',
            'movilidad' => $d[$base . '_movilidad'] ?? ''
        ];
    };

    // Etiquetas y Dibujo Arcadas
    $pdf->SetFont('helvetica', '', 5);
    $pdf->Text(2, $startY - 9 + 1.5, 'RECESIÓN');
    $pdf->Text(2, $startY - 6 + 1.5, 'MOVILIDAD');
    $pdf->Text(2, $startY + 4, 'VESTIBULAR');

    $currX = $startX;
    for ($i = 18; $i >= 11; $i--) {
        dibujarDienteVectorialOdonto($pdf, $currX, $startY, $i, $getDienteData($i), false);
        $currX += 11;
    }
    $currX += 5;
    for ($i = 21; $i <= 28; $i++) {
        dibujarDienteVectorialOdonto($pdf, $currX, $startY, $i, $getDienteData($i), false);
        $currX += 11;
    }

    $startY += 18; // Separador
    $pdf->SetFont('helvetica', 'B', 5);
    $pdf->Text(95, $startY - 2, 'LINGUAL');
    $pdf->Line(15, $startY - 3, 195, $startY - 3);

    $pdf->SetFont('helvetica', '', 5);
    $pdf->Text(2, $startY + 4, 'VESTIBULAR');
    $pdf->Text(2, $startY + 8 + 3 + 1.5, 'MOVILIDAD');
    $pdf->Text(2, $startY + 8 + 6 + 1.5, 'RECESIÓN');

    $currX = $startX;
    for ($i = 48; $i >= 41; $i--) {
        dibujarDienteVectorialOdonto($pdf, $currX, $startY, $i, $getDienteData($i), true);
        $currX += 11;
    }
    $currX += 5;
    for ($i = 31; $i <= 38; $i++) {
        dibujarDienteVectorialOdonto($pdf, $currX, $startY, $i, $getDienteData($i), true);
        $currX += 11;
    }

    // CORRECCIÓN CRÍTICA DE ALTURA
    // Antes: $startY + 25 (Superponía)
    // Ahora: $startY + 45 (Deja espacio suficiente para dientes inferiores y sus cajas)
    $pdf->SetY($startY + 45);

    // ==========================================
    // 7. INDICADORES y 8. INDICES
    // ==========================================
    // Verificar si queda espacio para esta sección (~45mm)
    $checkPageBreak(45);

    $ySec7 = $pdf->GetY();
    $w7 = 135;

    $pdf->SetFillColor(232, 245, 233);
    $pdf->SetTextColor(46, 125, 50);
    $pdf->SetFont('helvetica', 'B', 8);
    $pdf->SetXY(10, $ySec7);
    $pdf->Cell($w7, 6, '7. INDICADORES DE SALUD BUCAL', 1, 0, 'L', 1);
    $pdf->SetTextColor(0);

    // Dibujo tabla... (asegurar coordenads relativos a $ySec7 correctos)
    $pdf->SetXY(15, $ySec7 + 6);
    $pdf->SetFont('helvetica', 'B', 6);
    $pdf->Cell(55, 4, 'HIGIENE ORAL SIMPLIFICADA', 1, 0, 'C');
    $pdf->Cell(30, 4, 'ENFERMEDAD', 1, 0, 'C');
    $pdf->Cell(25, 4, 'MAL OCLUSIÓN', 1, 0, 'C');
    $pdf->Cell(25, 4, 'FLUOROSIS', 1, 0, 'C');

    // ... Subheaders ...
    $pdf->SetXY(15, $ySec7 + 10);
    $pdf->Cell(25, 8, 'PIEZAS DENTALES', 1, 0, 'C');
    $pdf->Cell(15, 4, 'PLACA', 1, 0, 'C');
    $pdf->Cell(15, 4, 'CÁLCULO', 1, 0, 'C');
    $pdf->Cell(30, 4, 'PERIODONTAL', 1, 0, 'C');
    $pdf->Cell(25, 4, '', 1, 0, 'C');
    $pdf->Cell(25, 4, '', 1, 0, 'C');

    $pdf->SetXY(40, $ySec7 + 14);
    $pdf->Cell(15, 4, '0-1-2-3', 1, 0, 'C');
    $pdf->Cell(15, 4, '0-1-2-3', 1, 0, 'C');

    $xH = 15;
    $yH = $ySec7 + 18;
    $pdf->SetFont('helvetica', '', 7);
    $piezas = [['16', '17', '55'], ['11', '21', '61'], ['26', '27', '65'], ['36', '37', '85'], ['31', '41', '81'], ['46', '47', '75']];
    for ($i = 0; $i < 6; $i++) {
        $pdf->SetXY($xH, $yH + ($i * 4));
        $pdf->Cell(8, 4, $piezas[$i][0], 1, 0, 'C');
        $pdf->Cell(9, 4, $piezas[$i][1], 1, 0, 'C');
        $pdf->Cell(8, 4, $piezas[$i][2], 1, 0, 'C');
        $pdf->Cell(15, 4, $d['placa_' . ($i + 1)] ?? '', 1, 0, 'C');
        $pdf->Cell(15, 4, $d['calc_' . ($i + 1)] ?? '', 1, 0, 'C');
    }

    $pdf->SetXY($xH, $yH + 24);
    $pdf->Cell(25, 4, 'TOTALES', 1, 0, 'C');
    $pdf->Cell(15, 4, $d['placa_total'] ?? '', 1, 0, 'C');
    $pdf->Cell(15, 4, $d['calc_total'] ?? '', 1, 0, 'C');

    // ... Checks ...
    $xP = 70;
    $yP = $ySec7 + 14;
    $drawCheckRow = function ($pdf, $x, $y, $label, $checked) {
        $pdf->SetXY($x, $y);
        $pdf->Cell(24, 6, $label, 1, 0, 'L');
        $pdf->Cell(6, 6, $checked ? 'X' : '', 1, 0, 'C');
    };
    $per = $d['periodontal'] ?? '';
    $drawCheckRow($pdf, $xP, $yP, 'LEVE', $per == 'leve');
    $drawCheckRow($pdf, $xP, $yP + 6, 'MODERADA', $per == 'mod');
    $drawCheckRow($pdf, $xP, $yP + 12, 'SEVERA', $per == 'sev');
    $xM = 100;
    $mal = $d['maloclusion'] ?? '';
    $drawCheckRow($pdf, $xM, $yP, 'ANGLE I', $mal == 'angle1');
    $drawCheckRow($pdf, $xM, $yP + 6, 'ANGLE II', $mal == 'angle2');
    $drawCheckRow($pdf, $xM, $yP + 12, 'ANGLE III', $mal == 'angle3');
    $xF = 130;
    $flu = $d['fluorosis'] ?? '';
    $drawCheckRow($pdf, $xF, $yP, 'LEVE', $flu == 'leve');
    $drawCheckRow($pdf, $xF, $yP + 6, 'MODERADA', $flu == 'mod');
    $drawCheckRow($pdf, $xF, $yP + 12, 'SEVERA', $flu == 'sev');

    // Section 8
    $x8 = 160;
    $pdf->SetXY($x8, $ySec7);
    $pdf->SetFillColor(232, 245, 233);
    $pdf->SetTextColor(46, 125, 50);
    $pdf->SetFont('helvetica', 'B', 8);
    $pdf->Cell(35, 6, '8. INDICES CPO-ceo', 1, 0, 'L', 1);
    $pdf->SetTextColor(0);

    $yT8 = $ySec7 + 6;
    $pdf->SetXY($x8, $yT8);
    $pdf->SetFont('helvetica', 'B', 7);
    $pdf->Cell(7, 6, '', 1, 0);
    $pdf->Cell(7, 6, 'C', 1, 0, 'C');
    $pdf->Cell(7, 6, 'P', 1, 0, 'C');
    $pdf->Cell(7, 6, 'O', 1, 0, 'C');
    $pdf->Cell(7, 6, 'TOT', 1, 0, 'C');

    $pdf->SetXY($x8, $yT8 + 6);
    $pdf->Cell(7, 6, 'D', 1, 0, 'C');
    $pdf->SetFont('helvetica', '', 7);
    $pdf->Cell(7, 6, $d['cpod_c'] ?? '', 1, 0, 'C');
    $pdf->Cell(7, 6, $d['cpod_p'] ?? '', 1, 0, 'C');
    $pdf->Cell(7, 6, $d['cpod_o'] ?? '', 1, 0, 'C');
    $pdf->Cell(7, 6, $d['cpod_total'] ?? '', 1, 0, 'C');

    $pdf->SetXY($x8, $yT8 + 12);
    $pdf->SetFont('helvetica', 'B', 7);
    $pdf->Cell(7, 6, '', 1, 0);
    $pdf->Cell(7, 6, 'c', 1, 0, 'C');
    $pdf->Cell(7, 6, 'e', 1, 0, 'C');
    $pdf->Cell(7, 6, 'o', 1, 0, 'C');
    $pdf->Cell(7, 6, 'TOT', 1, 0, 'C');

    $pdf->SetXY($x8, $yT8 + 18);
    $pdf->Cell(7, 6, 'd', 1, 0, 'C');
    $pdf->SetFont('helvetica', '', 7);
    $pdf->Cell(7, 6, $d['ceod_c'] ?? '', 1, 0, 'C');
    $pdf->Cell(7, 6, $d['ceod_e'] ?? '', 1, 0, 'C');
    $pdf->Cell(7, 6, $d['ceod_o'] ?? '', 1, 0, 'C');
    $pdf->Cell(7, 6, $d['ceod_total'] ?? '', 1, 0, 'C');

    $pdf->SetY($ySec7 + 42); // Altura total de esta sección compuesta

    // ==========================================
    // 9. SIMBOLOGÍA
    // ==========================================
    $checkPageBreak(30);
    dibujarTituloSeccionOdonto($pdf, '9. SIMBOLOGÍA DEL ODONTOGRAMA');
    $pdf->SetFont('helvetica', '', 7);
    $bX = 15;
    $bY = $pdf->GetY() + 2;
    $hLine = 6;

    $drawLegendItem = function ($pdf, $x, $y, $symbolType, $label) {
        $pdf->SetXY($x, $y);
        if ($symbolType == 'sellante_nec') {
            $pdf->SetTextColor(211, 47, 47);
            $pdf->Text($x, $y, '*');
        }
        if ($symbolType == 'sellante_rea') {
            $pdf->SetTextColor(25, 118, 210);
            $pdf->Text($x, $y, '*');
        }
        if ($symbolType == 'extraccion') {
            $pdf->SetTextColor(211, 47, 47);
            $pdf->Text($x, $y + 1, 'X');
        }
        if ($symbolType == 'perdida_caries') {
            $pdf->SetTextColor(25, 118, 210);
            $pdf->Text($x, $y + 1, 'X');
        }
        if ($symbolType == 'perdida_otra') {
            $pdf->SetTextColor(211, 47, 47);
            $pdf->Text($x, $y + 1, '(X)');
        }
        if ($symbolType == 'endodoncia') {
            $pdf->SetTextColor(211, 47, 47);
            $pdf->Text($x, $y, '▲');
        }
        if ($symbolType == 'corona') {
            $pdf->SetDrawColor(211, 47, 47);
            $pdf->Rect($x, $y + 1, 4, 4);
        }
        if ($symbolType == 'fija') {
            $pdf->SetTextColor(211, 47, 47);
            $pdf->Text($x, $y, '[  ]');
        }
        if ($symbolType == 'removible') {
            $pdf->SetTextColor(211, 47, 47);
            $pdf->Text($x, $y, '(  )');
        }
        if ($symbolType == 'total') {
            $pdf->SetTextColor(211, 47, 47);
            $pdf->Text($x, $y + 1, '=');
        }
        if ($symbolType == 'obturado') {
            $pdf->SetFillColor(25, 118, 210);
            $pdf->Circle($x + 2, $y + 3, 1.5, 0, 360, 'F');
        }
        if ($symbolType == 'caries') {
            $pdf->SetFillColor(211, 47, 47);
            $pdf->Circle($x + 2, $y + 3, 1.5, 0, 360, 'F');
        }
        $pdf->SetTextColor(0);
        $pdf->SetDrawColor(0);
        $pdf->SetXY($x + 8, $y + 1);
        $pdf->Cell(40, 4, $label, 0, 0, 'L');
    };

    $drawLegendItem($pdf, $bX, $bY, 'sellante_nec', 'SELLANTE NECESARIO');
    $drawLegendItem($pdf, $bX, $bY + $hLine, 'sellante_rea', 'SELLANTE REALIZADO');
    $drawLegendItem($pdf, $bX, $bY + $hLine * 2, 'extraccion', 'EXTRACCIÓN INDICADA');
    $drawLegendItem($pdf, $bX, $bY + $hLine * 3, 'perdida_caries', 'PÉRDIDA POR CARIES');
    $bX2 = $bX + 60;
    $drawLegendItem($pdf, $bX2, $bY, 'perdida_otra', 'PÉRDIDA (OTRA CAUSA)');
    $drawLegendItem($pdf, $bX2, $bY + $hLine, 'endodoncia', 'ENDODONCIA');
    $drawLegendItem($pdf, $bX2, $bY + $hLine * 2, 'fija', 'PRÓTESIS FIJA');
    $drawLegendItem($pdf, $bX2, $bY + $hLine * 3, 'removible', 'PRÓTESIS REMOVIBLE');
    $bX3 = $bX2 + 60;
    $drawLegendItem($pdf, $bX3, $bY, 'total', 'PRÓTESIS TOTAL');
    $drawLegendItem($pdf, $bX3, $bY + $hLine, 'corona', 'CORONA');
    $drawLegendItem($pdf, $bX3, $bY + $hLine * 2, 'obturado', 'OBTURADO');
    $drawLegendItem($pdf, $bX3, $bY + $hLine * 3, 'caries', 'CARIES');

    $pdf->SetY($bY + ($hLine * 4) + 2);

    // ==========================================
    // 10. PLANES
    // ==========================================
    $checkPageBreak(30);
    dibujarTituloSeccionOdonto($pdf, '10. PLANES DE DIAGNÓSTICO, TERAPÉUTICO Y EDUCACIONAL');
    $pdf->SetFont('helvetica', '', 8);
    $chkBio = isset($d['plan_biometria']) ? 'X' : ' ';
    $chkQui = isset($d['plan_quimica']) ? 'X' : ' ';
    $chkRay = isset($d['plan_rayos']) ? 'X' : ' ';
    $chkOtr = isset($d['plan_otros']) ? 'X' : ' ';
    $pdf->Cell(25, 6, 'Biometría: [' . $chkBio . ']', 0, 0);
    $pdf->Cell(35, 6, 'Química Sang.: [' . $chkQui . ']', 0, 0);
    $pdf->Cell(25, 6, 'Rayos-X: [' . $chkRay . ']', 0, 0);
    $pdf->Cell(25, 6, 'Otros: [' . $chkOtr . ']', 0, 1);
    $pdf->MultiCell(190, 8, $d['plan_descripcion'] ?? '', 1, 'L');
    $pdf->Ln(2);

    // ==========================================
    // 11. DIAGNÓSTICO
    // ==========================================
    $checkPageBreak(30);
    dibujarTituloSeccionOdonto($pdf, '11. DIAGNÓSTICO');
    $pdf->SetFont('helvetica', 'B', 7);
    $pdf->SetFillColor(240, 240, 240);
    $pdf->Cell(10, 5, 'No', 1, 0, 'C', 1);
    $pdf->Cell(130, 5, 'DIAGNÓSTICO DESCRIPTIVO', 1, 0, 'C', 1);
    $pdf->Cell(20, 5, 'CIE', 1, 0, 'C', 1);
    $pdf->Cell(15, 5, 'PRE', 1, 0, 'C', 1);
    $pdf->Cell(15, 5, 'DEF/REP', 1, 1, 'C', 1);

    $pdf->SetFont('helvetica', '', 7);
    // Recuperación robusta diagnóstico
    $diagnosticos = [];
    if (isset($d['diagnosticos']) && !empty($d['diagnosticos'])) {
        $raw = $d['diagnosticos'];
        $jsonDiags = json_decode($raw, true);
        if (json_last_error() !== JSON_ERROR_NONE)
            $jsonDiags = json_decode(stripslashes($raw), true);
        if (json_last_error() !== JSON_ERROR_NONE)
            $jsonDiags = json_decode(html_entity_decode($raw), true);
        if (is_array($jsonDiags))
            $diagnosticos = $jsonDiags;
    }
    $totalRows = max(4, count($diagnosticos)); // Mínimo 4 filas

    for ($i = 0; $i < $totalRows; $i++) {
        $checkPageBreak(6); // Chequear por fila
        $diag = $diagnosticos[$i] ?? null;
        $desc = $diag ? ($diag['enfermedad'] ?? '') : '';
        $cie = $diag ? ($diag['codigo'] ?? '') : '';
        $tipo = $diag ? ($diag['tipo'] ?? '') : '';
        // Fallback
        if (!$diag && $i < 4) {
            $idx = $i + 1;
            if (isset($d["diag_{$idx}_desc"]) && !empty($d["diag_{$idx}_desc"])) {
                $desc = $d["diag_{$idx}_desc"];
                $cie = $d["diag_{$idx}_cie"];
                $tipo = $d["diag_{$idx}_kind"];
            }
        }
        $pre = (strtoupper($tipo) == 'PRE' || strtoupper($tipo) == 'PRESUNTIVO') ? 'X' : '';
        $def = (strtoupper($tipo) == 'DEF' || strtoupper($tipo) == 'DEFINITIVO') ? 'X' : '';
        $rep = (strpos(strtoupper($tipo), 'REP') !== false) ? 'R' : '';

        $pdf->Cell(10, 5, $i + 1, 1, 0, 'C');
        $pdf->Cell(130, 5, substr($desc, 0, 75), 1, 0, 'L');
        $pdf->Cell(20, 5, $cie, 1, 0, 'C');
        $pdf->Cell(15, 5, $pre, 1, 0, 'C');
        $pdf->Cell(15, 5, ($def ? 'X' : ($rep ? 'R' : '')), 1, 1, 'C');
    }
    $pdf->Ln(2);

    // ==========================================
    // 12. TRATAMIENTO
    // ==========================================
    $checkPageBreak(25);
    dibujarTituloSeccionOdonto($pdf, '12. TRATAMIENTO');
    $pdf->SetFont('helvetica', 'B', 6);
    $pdf->SetFillColor(240, 240, 240);
    $pdf->Cell(10, 6, 'SESIÓN', 1, 0, 'C', 1);
    $pdf->Cell(15, 6, 'FECHA', 1, 0, 'C', 1);
    $pdf->Cell(45, 6, 'DIAGNÓSTICOS Y COMPL.', 1, 0, 'C', 1);
    $pdf->Cell(45, 6, 'PROCEDIMIENTOS', 1, 0, 'C', 1);
    $pdf->Cell(40, 6, 'PRESCRIPCIONES', 1, 0, 'C', 1);
    $pdf->Cell(35, 6, 'CÓDIGO Y FIRMA', 1, 1, 'C', 1);
    $pdf->SetFont('helvetica', '', 6);

    if (isset($d['trat_sesion']) && is_array($d['trat_sesion'])) {
        $tratamientosValidos = [];
        $totalRaw = count($d['trat_sesion']);
        for ($k = 0; $k < $totalRaw; $k++) {
            if (trim($d['trat_sesion'][$k] ?? '') != '' || trim($d['trat_fecha'][$k] ?? '') != '')
                $tratamientosValidos[] = $k;
        }
        $indicesProcesar = array_slice($tratamientosValidos, 0, 50);

        foreach ($indicesProcesar as $k) {
            $h = 8;
            $checkPageBreak($h); // Chequear altura antes de imprimir

            $yStart = $pdf->GetY();
            $pdf->Cell(10, $h, $d['trat_sesion'][$k], 1, 0, 'C');
            $pdf->Cell(15, $h, $d['trat_fecha'][$k], 1, 0, 'C');

            $x = $pdf->GetX();
            $y = $pdf->GetY();

            $pdf->SetXY($x, $yStart);
            $pdf->MultiCell(45, $h, $d['trat_diag'][$k] ?? '', 1, 'L', 0, 0, '', '', true, 0, false, true, $h, 'T', true);
            $pdf->SetXY($x + 45, $yStart);
            $pdf->MultiCell(45, $h, $d['trat_proc'][$k] ?? '', 1, 'L', 0, 0, '', '', true, 0, false, true, $h, 'T', true);
            $pdf->SetXY($x + 90, $yStart);
            $pdf->MultiCell(40, $h, $d['trat_presc'][$k] ?? '', 1, 'L', 0, 0, '', '', true, 0, false, true, $h, 'T', true);
            $pdf->SetXY($x + 130, $yStart);
            $pdf->Cell(35, $h, $d['trat_firma'][$k] ?? '', 1, 1, 'C');
        }
    } else {
        $pdf->Cell(190, 6, 'Sin tratamiento registrado', 1, 1, 'C');
    }

    // Pie con firma electrónica simulada (QR) — patrón maestro MSP
    $qrTimestamp = date('Y-m-d H:i:s');
    $qrContent = function_exists('_mspQrContent')
        ? _mspQrContent($idatencion, 'ODONTOPEDIATRÍA · Historia Clínica', $emisor, $qrTimestamp)
        : "FIRMA ELECTRONICA SIMULADA · ODONTOPEDIATRÍA · #{$idatencion} · {$qrTimestamp}";

    $pdf->Ln(4);
    $yPie = $pdf->GetY();
    $pdf->SetFillColor(204, 255, 204);
    $pdf->SetTextColor(0, 0, 0);
    $pdf->SetFont('helvetica', 'B', 8);
    $pdf->SetXY(10, $yPie);
    $pdf->Cell(30, 6, 'FECHA', 1, 0, 'C', 1);
    $pdf->Cell(20, 6, 'HORA', 1, 0, 'C', 1);
    $pdf->Cell(90, 6, 'NOMBRE DEL PROFESIONAL', 1, 0, 'C', 1);
    $pdf->Cell(50, 6, 'FIRMA ELECTRÓNICA', 1, 1, 'C', 1);

    $yDatos = $pdf->GetY();
    $pdf->SetFont('helvetica', '', 8);
    $pdf->Cell(30, 20, date('Y-m-d'), 1, 0, 'C');
    $pdf->Cell(20, 20, date('H:i'), 1, 0, 'C');
    $profStr = trim(($emisor['profesional'] ?: '—')
        . ($emisor['especialidad'] ? '  ·  ' . $emisor['especialidad'] : '')
        . ($emisor['senescyt'] ? '  ·  MSP ' . $emisor['senescyt'] : ''));
    $pdf->Cell(90, 20, $profStr, 1, 0, 'C');
    $pdf->Cell(50, 20, '', 1, 1, 'C');

    $pdf->write2DBarcode(
        $qrContent, 'QRCODE,M',
        142, $yDatos + 1, 18, 18,
        ['border'=>false, 'padding'=>0, 'fgcolor'=>[0,0,0], 'bgcolor'=>[255,255,255]],
        'N'
    );

    $pdf->SetTextColor(0, 86, 98);
    $pdf->SetFont('helvetica', 'B', 5);
    $pdf->SetXY(162, $yDatos + 2);
    $pdf->Cell(28, 2.5, 'FIRMADO ELECTRÓNICAMENTE', 0, 1, 'L');
    $pdf->SetTextColor(0, 0, 0);
    $pdf->SetFont('helvetica', 'B', 5.5);
    $pdf->SetXY(162, $yDatos + 5);
    $pdf->MultiCell(28, 2.5, $emisor['profesional'] ?: '—', 0, 'L', false, 0, '', '', true, 0, false, true, 5, 'T');
    if (!empty($emisor['senescyt'])) {
        $pdf->SetFont('helvetica', '', 5);
        $pdf->SetXY(162, $yDatos + 10);
        $pdf->Cell(28, 2.3, 'MSP ' . $emisor['senescyt'], 0, 1, 'L');
    }
    $pdf->SetFont('helvetica', '', 4.8);
    $pdf->SetTextColor(60, 60, 60);
    $pdf->SetXY(162, $yDatos + 13);
    $pdf->Cell(28, 2.3, $qrTimestamp, 0, 1, 'L');
    $pdf->SetTextColor(0, 0, 0);

    return salvarPDF($pdf, 'ODONTOPEDIATRIA', $idatencion);
}

function dibujarTituloSeccionOdonto($pdf, $texto)
{
    // Ya no chequeamos PageBreak aquí, lo hacemos fuera
    $pdf->SetFillColor(232, 245, 233);
    $pdf->SetLineStyle(array('width' => 0.5, 'color' => array(46, 125, 50)));
    $pdf->SetFont('helvetica', 'B', 9);
    $pdf->SetTextColor(46, 125, 50);
    $pdf->Cell(190, 6, '  ' . $texto, 'L', 1, 'L', 1);
    $pdf->SetTextColor(0);
    $pdf->SetLineStyle(array('width' => 0.2, 'color' => array(0, 0, 0)));
}
?>