<?php
// --- Auth gate: PDF standalone, sin sesión no se sirve ---
if (session_status() !== PHP_SESSION_ACTIVE) { @session_start(); }
if (empty($_SESSION['user_id'])) { header('Location: index.php?view=login'); exit; }
// --- end auth gate ---
// internacion-pdf.php - Cuadro Térmico (tabla única con 3 días consecutivos)
include __DIR__ . '/core/autoload.php';
include __DIR__ . '/core/app/model/UserData.php';
// === User signature for footer (clinicademo) ===
if (session_status() !== PHP_SESSION_ACTIVE) { @session_start(); }
$clinicademo_sig_user_id = $_SESSION['user_id'] ?? null;
$clinicademo_sig_user_name = 'Sistema';
if ($clinicademo_sig_user_id) {
    $_u = UserData::getById($clinicademo_sig_user_id);
    if ($_u) {
        $_n = trim(($_u->name ?? '') . ' ' . ($_u->lastname ?? ''));
        if ($_n !== '') {
            $clinicademo_sig_user_name = $_n;
        } elseif (!empty($_u->username)) {
            $clinicademo_sig_user_name = $_u->username;
        }
    }
}
$clinicademo_sig_footer = 'Generado por: ' . $clinicademo_sig_user_name . ' | ' . date('d/m/Y H:i:s');

include __DIR__ . '/core/app/model/CotizacionData.php';
include __DIR__ . '/core/app/model/PacientData.php';
include __DIR__ . '/core/app/model/MedicData.php';
include __DIR__ . '/core/app/model/InventoryItemData.php';
include __DIR__ . '/core/app/model/QuirofanoData.php';

if (!isset($_GET['pacient_id'])) {
    die('Paciente ID requerido');
}

$pacientId = intval($_GET['pacient_id']);
$con = Database::getCon();

$pacient = $con->query("SELECT * FROM pacient WHERE id = $pacientId")->fetch_object();
if (!$pacient) die('Paciente no encontrado');

$age = $pacient->birthdate ? floor((time() - strtotime($pacient->birthdate)) / (365.25 * 24 * 60 * 60)) : null;

$rows = $con->query("
    SELECT fecha, hora_grupo, temperatura, frecuencia_cardiaca, frecuencia_respiratoria,
           pa_sistolica, pa_diastolica, sat_o2, peso, talla, dieta, diuresis, catarsis, otros
    FROM internacion_control
    WHERE pacient_id = $pacientId
    ORDER BY fecha DESC, hora_grupo ASC
")->fetch_all(MYSQLI_ASSOC);

$data = [];
$allDates = [];
foreach ($rows as $r) {
    $data[$r['fecha']][$r['hora_grupo']] = $r;
    $allDates[$r['fecha']] = true;
}
$allDates = array_keys($allDates);
// 3 días consecutivos, más recientes primero
$displayDates = array_slice($allDates, 0, 2);

$shiftLabels = ['06-12', '12-18', '18-24', '00-06'];

// Filas del cuadro: escalas con valores predeterminados
$scaleRows = [
    ['FC' => [170, 160], 'FR' => 70, 'T' => 41, 'PA' => [200, 180], 'SatO2' => 100],
    ['FC' => [150, 140], 'FR' => 60, 'T' => 40, 'PA' => [180, 160], 'SatO2' => 98],
    ['FC' => [130, 120], 'FR' => 50, 'T' => 39, 'PA' => [160, 140], 'SatO2' => 96],
    ['FC' => [110, 100], 'FR' => 40, 'T' => 38, 'PA' => [140, 120], 'SatO2' => 94],
    ['FC' => [90, 80],   'FR' => 30, 'T' => 37, 'PA' => [120, 100], 'SatO2' => 92],
    ['FC' => [70, 60],   'FR' => 20, 'T' => 36, 'PA' => [100, 80],  'SatO2' => 90],
    ['FC' => [50, 40],   'FR' => 10, 'T' => 35, 'PA' => [80, 60],   'SatO2' => 88],
];

// Filas de 1 registro/día (valor único por día)
$dailyParams = [
    ['label' => 'Peso (kg)',  'cb' => fn($r) => $r && $r['peso'] !== null ? number_format($r['peso'], 1) : '-'],
    ['label' => 'Talla (cm)', 'cb' => fn($r) => $r && $r['talla'] !== null ? (int)$r['talla'] : '-'],
    ['label' => 'Dieta',      'cb' => fn($r) => $r && ($r['dieta'] ?? '') !== '' ? substr($r['dieta'], 0, 15) : '-'],
    ['label' => 'Diuresis',   'cb' => fn($r) => $r && ($r['diuresis'] ?? '') !== '' ? substr($r['diuresis'], 0, 15) : '-'],
    ['label' => 'Catarsis',   'cb' => fn($r) => $r && ($r['catarsis'] ?? '') !== '' ? substr($r['catarsis'], 0, 15) : '-'],
    ['label' => 'Otros',      'cb' => fn($r) => $r && ($r['otros'] ?? '') !== '' ? substr($r['otros'], 0, 15) : '-'],
];

// TCPDF (landscape)
require_once 'tcpdf/tcpdf.php';

$pdf = new TCPDF('P', 'mm', 'A4', true, 'UTF-8', false);
$pdf->SetCreator('Cedimik');
$pdf->SetAuthor('Cedimik');
$pdf->SetTitle('Cuadro Termico - ' . PacientData::fullName($pacient));
$pdf->SetSubject('Control de Internacion');
$pdf->SetMargins(8, 10, 8);
$pdf->SetAutoPageBreak(false);
$pdf->SetFont('helvetica', '', 6);

// Página única
$pdf->AddPage();

// Cabecera compacta
$pdf->SetFont('helvetica', 'B', 10);
$pdf->Image('assets/images/logo/logo.png', 8, 10, 22, 11, 'PNG', '', '', true, 150, '', false, false, 0, false, false, false);
$pdf->SetXY(32, 10);
$pdf->Cell(170, 5, 'CUADRO TERMICO DE CONTROL - Internacion', 0, 1, 'L');
$pdf->SetFont('helvetica', '', 6);
$pdf->SetXY(32, 18);
$pdf->Cell(170, 4, 'Paciente: ' . PacientData::fullName($pacient) . ' | CI: ' . ($pacient->dni ?: '-') . ' | Edad: ' . ($age ?: '-') . ' | Sexo: ' . ($pacient->sex === 'F' ? 'F' : ($pacient->sex === 'M' ? 'M' : '-')) . ' | ' . date('d/m/Y H:i:s'), 0, 1, 'L');
$pdf->SetFont('helvetica', 'I', 5);
$pdf->SetXY(32, 23);
$pdf->Cell(170, 3, 'Turnos: 06-12 Mañana | 12-18 Tarde | 18-24 Noche | 00-06 Madrugada', 0, 1, 'L');

// Anchos (portrait: 210mm, margen 8mm c/u -> usable 194mm)
$tableLeft = 8;
$tableRight = 202;
$tableWidth = $tableRight - $tableLeft;
$scaleColW = 8;
$scaleCols = 5;
$shiftCols = count($displayDates) * 4;
$shiftColW = ($tableWidth - $scaleCols * $scaleColW) / max($shiftCols, 1);
$rowH = 5.5;

// Espacio entre encabezado y tabla
$pdf->Ln(5);

// Cabecera fila 1: ESCALAS + fechas (colspan 4 cada una)
$pdf->SetFont('helvetica', 'B', 6);
$pdf->SetFillColor(102, 126, 234);
$pdf->SetTextColor(255, 255, 255);
$pdf->Cell($scaleColW * $scaleCols, 4, 'ESCALAS', 1, 0, 'C', true);
foreach ($displayDates as $d) {
    $pdf->Cell($shiftColW * 4, 4, date('d/m', strtotime($d)) . ' (' . strftime('%a', strtotime($d)) . ')', 1, 0, 'C', true);
}
$pdf->SetTextColor(0, 0, 0);
$pdf->Ln();

// Cabecera fila 2: nombre escalas + turnos
$pdf->SetFont('helvetica', 'B', 5.5);
$pdf->SetFillColor(232, 241, 255);
$pdf->SetTextColor(0, 0, 0);
$pdf->Cell($scaleColW, 3.5, 'FC', 1, 0, 'C', true);
$pdf->Cell($scaleColW, 3.5, 'FR', 1, 0, 'C', true);
$pdf->Cell($scaleColW, 3.5, 'T°', 1, 0, 'C', true);
$pdf->Cell($scaleColW, 3.5, 'PA', 1, 0, 'C', true);
$pdf->Cell($scaleColW, 3.5, 'SatO2', 1, 0, 'C', true);
foreach ($displayDates as $d) {
    foreach ($shiftLabels as $sl) {
        $pdf->Cell($shiftColW, 3.5, $sl, 1, 0, 'C', true);
    }
}
$pdf->Ln();

// Filas de escalas
$pdf->SetFont('helvetica', 'B', 5);
foreach ($scaleRows as $rowIdx => $row) {
    $pdf->SetFillColor(232, 241, 255);
    $pdf->Cell($scaleColW, $rowH, $row['FC'][0] . '/' . $row['FC'][1], 1, 0, 'C', true);
    $pdf->Cell($scaleColW, $rowH, $row['FR'], 1, 0, 'C', true);
    $pdf->Cell($scaleColW, $rowH, $row['T'], 1, 0, 'C', true);
    $pdf->Cell($scaleColW, $rowH, $row['PA'][0] . '/' . $row['PA'][1], 1, 0, 'C', true);
    $pdf->Cell($scaleColW, $rowH, $row['SatO2'], 1, 0, 'C', true);

    $pdf->SetFont('helvetica', '', 5);
    foreach ($displayDates as $d) {
        foreach ($shiftLabels as $sIdx => $sl) {
            $r = $data[$d][$sIdx] ?? null;
            $parts = [];
            if ($r) {
                if ($r['frecuencia_cardiaca'] !== null && $r['frecuencia_cardiaca'] >= $row['FC'][1] && $r['frecuencia_cardiaca'] <= $row['FC'][0]) {
                    $parts[] = $r['frecuencia_cardiaca'];
                }
                if ($r['frecuencia_respiratoria'] !== null && $r['frecuencia_respiratoria'] == $row['FR']) {
                    $parts[] = $r['frecuencia_respiratoria'];
                }
                if ($r['temperatura'] !== null && (int)$r['temperatura'] == $row['T']) {
                    $parts[] = (int)$r['temperatura'] . '°';
                }
                if (($r['pa_sistolica'] !== null) && $r['pa_sistolica'] >= $row['PA'][1] && $r['pa_sistolica'] <= $row['PA'][0]) {
                    $parts[] = ($r['pa_sistolica'] ?? '-') . '/' . ($r['pa_diastolica'] ?? '-');
                }
                if ($r['sat_o2'] !== null && (int)$r['sat_o2'] == $row['SatO2']) {
                    $parts[] = (int)$r['sat_o2'] . '%';
                }
            }
            $content = empty($parts) ? '' : implode('|', $parts);
            $fill = empty($parts) ? 0 : 1;
            if ($fill) $pdf->SetFillColor(255, 243, 205);
            $pdf->Cell($shiftColW, $rowH, $content, 1, 0, 'C', $fill);
            $pdf->SetFillColor(232, 241, 255);
        }
    }
    $pdf->Ln();
    $pdf->SetFont('helvetica', 'B', 5);
}

// Separador
$pdf->SetFont('helvetica', 'B', 6);
$pdf->SetFillColor(44, 62, 80);
$pdf->SetTextColor(255, 255, 255);
$pdf->Cell($tableWidth, 3.5, '  REGISTROS DIARIOS (1 por día)', 1, 1, 'L', true);
$pdf->SetTextColor(0, 0, 0);
$pdf->Ln(0);

// Filas de 1 registro/día (celda combinada a través de los 4 turnos del día)
$pdf->SetFont('helvetica', '', 5);
foreach ($dailyParams as $p) {
    $pdf->SetFillColor(255, 255, 255);
    $pdf->SetFont('helvetica', 'B', 5.5);
    $pdf->Cell($scaleColW * $scaleCols, 4.5, $p['label'], 1, 0, 'L');
    $pdf->SetFont('helvetica', '', 5.5);
    foreach ($displayDates as $d) {
        $val = '-';
        for ($i = 0; $i < 4; $i++) {
            $v = ($p['cb'])($data[$d][$i] ?? null);
            if ($v !== '-') { $val = $v; break; }
        }
        $pdf->Cell($shiftColW * 4, 4.5, $val, 1, 0, 'C');
    }
    $pdf->Ln();
}

// Leyenda
$pdf->Ln(2);
$pdf->SetFont('helvetica', 'I', 5);
$pdf->Cell(0, 3, 'Cada celda muestra el valor que cae en el nivel de la fila. Formato: FC|FR|T|PA|SatO2 (ej: 95|22|37|120/80|98).', 0, 1, 'L');

$pdf->Output('Cuadro_Termico_' . $pacientId . '.pdf', 'I');
