<?php
require '../db.php';
require '../libs/fpdf/fpdf.php';

ini_set('display_errors', 1);
error_reporting(E_ALL);

ob_start();

$tipo = $_GET['tipo'] ?? '';
if(empty($tipo)){
    die("Tipo no definido");
}

$stmt = $conn->prepare("SELECT * FROM cartas WHERE tipo=? AND estado=1 ORDER BY fecha_recepcion DESC");
$stmt->bind_param("s", $tipo);
$stmt->execute();
$res = $stmt->get_result();

// ===== CLASE PDF MEJORADA =====
class PDF extends FPDF {
    // Cabecera de página
    function Header(){
        $this->SetFont('Arial','B',14);
        $this->Cell(0,10, mb_convert_encoding('REPORTE DE CARTAS', 'ISO-8859-1', 'UTF-8'), 0, 1, 'C');
        $this->Ln(3);
    }

    // Pie de página
    function Footer(){
        $this->SetY(-15);
        $this->SetFont('Arial','I',8);
        $this->Cell(0,10, mb_convert_encoding('Página ', 'ISO-8859-1', 'UTF-8').$this->PageNo().'/{nb}', 0, 0, 'C');
    }

    // Función para crear una fila adaptativa
    function Row($widths, $data) {
        $nb = 0;
        // Calculamos el número de líneas que tendrá la celda más alta
        for($i=0; $i<count($data); $i++) {
            $nb = max($nb, $this->NbLines($widths[$i], $data[$i]));
        }
        
        $h = 5 * $nb; // 5 es el alto de una línea simple

        // Salto de página si es necesario
        $this->CheckPageBreak($h);

        // Dibujamos las celdas de la fila
        for($i=0; $i<count($data); $i++) {
            $w = $widths[$i];
            $x = $this->GetX();
            $y = $this->GetY();
            
            // Dibujar el borde de la celda
            $this->Rect($x, $y, $w, $h);
            
            // Escribir el texto
            $this->MultiCell($w, 5, $data[$i], 0, 'L');
            
            // Posicionarse a la derecha de la celda actual
            $this->SetXY($x + $w, $y);
        }
        $this->Ln($h);
    }

    // Verifica si la fila cabe en la página, si no, añade una nueva
    function CheckPageBreak($h) {
        if($this->GetY() + $h > $this->PageBreakTrigger) {
            $this->AddPage($this->CurOrientation);
            // Re-imprimir encabezado de tabla si es necesario
            $this->TableHeader(); 
        }
    }

    // Función auxiliar para calcular líneas de un texto (Basado en script oficial FPDF)
    function NbLines($w, $txt) {
        $cw = &$this->CurrentFont['cw'];
        if($w == 0) $w = $this->w - $this->rMargin - $this->x;
        $wmax = ($w - 2 * $this->cMargin) * 1000 / $this->FontSize;
        $s = str_replace("\r", '', $txt);
        $nb = strlen($s);
        if($nb > 0 and $s[$nb-1] == "\n") $nb--;
        $sep = -1; $i = 0; $j = 0; $l = 0; $nl = 1;
        while($i < $nb) {
            $c = $s[$i];
            if($c == "\n") { $i++; $sep = -1; $j = $i; $l = 0; $nl++; continue; }
            if($c == ' ') $sep = $i;
            $l += $cw[$c];
            if($l > $wmax) {
                if($sep == -1) { if($i == $j) $i++; }
                else $i = $sep + 1;
                $sep = -1; $j = $i; $l = 0; $nl++;
            } else $i++;
        }
        return $nl;
    }

    // Encabezado de la tabla (para repetir en cada página)
    function TableHeader() {
        $this->SetFont('Arial','B',9);
        $this->SetFillColor(230, 230, 230); // Color gris suave
        $widths = [40, 35, 35, 60, 20];
        $headers = ['N Carta', 'Remitente', 'Destinatario', mb_convert_encoding('Descripción', 'ISO-8859-1', 'UTF-8'), 'Fecha'];
        
        for($i=0; $i<count($headers); $i++) {
            $this->Cell($widths[$i], 8, $headers[$i], 1, 0, 'C', true);
        }
        $this->Ln();
        $this->SetFont('Arial','',8);
    }
}

// ===== GENERACIÓN =====
$pdf = new PDF();
$pdf->AliasNbPages();
$pdf->AddPage();

// Título de tipo
$pdf->SetFont('Arial','B',11);
$pdf->Cell(0, 10, 'TIPO DE DOCUMENTO: ' . strtoupper($tipo), 0, 1, 'L');
$pdf->Ln(2);

// Encabezados de tabla
$pdf->TableHeader();

// Anchos de columnas
$widths = [40, 35, 35, 60, 20];

while ($c = $res->fetch_assoc()) {
    $pdf->Row($widths, [
        mb_convert_encoding($c['numero_carta'] ?? '', 'ISO-8859-1', 'UTF-8'),
        mb_convert_encoding($c['remitente'] ?? '', 'ISO-8859-1', 'UTF-8'),
        mb_convert_encoding($c['destinatario'] ?? '', 'ISO-8859-1', 'UTF-8'),
        mb_convert_encoding($c['descripcion'] ?? '', 'ISO-8859-1', 'UTF-8'),
        !empty($c['fecha_recepcion']) ? date("d/m/Y", strtotime($c['fecha_recepcion'])) : ''
    ]);
}

ob_end_clean();
$pdf->Output('I', 'reporte_'.$tipo.'.pdf'); // 'I' para visualizar en navegador
exit;