<?php
require_once "../config/Conexion.php";
require_once "../modelos/OdontPresupuesto.php";
require_once "../modelos/OdontCuota.php";

// Cargar TCPDF
$baseDir = dirname(__DIR__);
$docRoot = isset($_SERVER['DOCUMENT_ROOT']) && !empty($_SERVER['DOCUMENT_ROOT']) ? rtrim($_SERVER['DOCUMENT_ROOT'], '/') : $baseDir;
$cpanelSharedPath = '/home/' . get_current_user() . '/public_html/tcpdf/tcpdf.php';

$tcpdfFile = '';
$rutasProbar = [
    $docRoot . '/tcpdf/tcpdf.php',
    $cpanelSharedPath,
    $baseDir . '/tcpdf/tcpdf.php',
    $baseDir . '/../tcpdf/tcpdf.php',
    $baseDir . '/public/tcpdf/tcpdf.php',
    $baseDir . '/../public/tcpdf/tcpdf.php',
    $baseDir . '/public/plugins/tcpdf/tcpdf.php'
];
foreach ($rutasProbar as $ruta) {
    if (file_exists($ruta)) {
        $tcpdfFile = $ruta;
        break;
    }
}
if (!$tcpdfFile) {
    $busqueda = glob($baseDir . '/public/*/tcpdf.php');
    if (empty($busqueda)) {
        $busqueda = glob($baseDir . '/public/plugins/*/tcpdf.php');
    }
    $tcpdfFile = !empty($busqueda) ? $busqueda[0] : '';
}
if (!$tcpdfFile) {
    die("Error: TCPDF no encontrado.");
}
require_once($tcpdfFile);

$presupuesto = new OdontPresupuesto();
$cuota_model = new OdontCuota();

$idpresupuesto = $_GET['id'];

// Obtener datos del presupuesto
$rspta = $presupuesto->mostrar($idpresupuesto);
$plan = $cuota_model->obtenerPlanPorPresupuesto($idpresupuesto);

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

// Configuración del documento
$pdf->SetCreator('Sistema Odontológico');
$pdf->SetAuthor($rspta['usuario']);
$pdf->SetTitle('Presupuesto Odontológico #' . $idpresupuesto);
$pdf->SetSubject('Plan de Tratamiento');

// Quitar header y footer por defecto
$pdf->setPrintHeader(false);
$pdf->setPrintFooter(false);

// Márgenes
$pdf->SetMargins(15, 15, 15);
$pdf->SetAutoPageBreak(TRUE, 15);

// Agregar página
$pdf->AddPage();

// Banner dinámico (siempre toma de public/img/banner.png)
$banner_path = '../public/img/banner.png';
if (file_exists($banner_path)) {
    // Obtener dimensiones de la página y banner para centrar
    $pageWidth = $pdf->getPageWidth(); // 210mm en A4
    $margins = $pdf->getMargins();
    $contentWidth = $pageWidth - $margins['left'] - $margins['right']; // Ancho útil

    // Forzar el banner a tener un ancho de 160mm para que se vea bien pero no borde a borde
    $bannerWidth = 160;
    $x = ($pageWidth - $bannerWidth) / 2;

    $pdf->Image($banner_path, $x, 10, $bannerWidth, 0, 'PNG', '', 'T', false, 300, '', false, false, 0, false, false, false);
    $pdf->Ln(35); // Espacio después del banner
} else {
    // Si no existe banner, mostrar nombre del sistema
    $pdf->SetFont('helvetica', 'B', 20);
    $pdf->Cell(0, 10, 'PRESUPUESTO ODONTOLÓGICO', 0, 1, 'C');
    $pdf->Ln(5);
}

// Información del presupuesto
$pdf->SetFont('helvetica', 'B', 14);
$pdf->SetFillColor(41, 128, 185);
$pdf->SetTextColor(255, 255, 255);
// Celda extendida al ancho total disponible
$pdf->Cell(0, 10, 'PLAN DE TRATAMIENTO', 0, 1, 'C', true);
$pdf->Ln(5);

// Datos del paciente y presupuesto
$pdf->SetFont('helvetica', '', 10);
$pdf->SetTextColor(0, 0, 0);

// Usar una tabla invisible para alinear mejor los datos del encabezado
$pdf->SetFont('helvetica', 'B', 10);
$pdf->Cell(35, 7, 'Presupuesto N°:', 0, 0);
$pdf->SetFont('helvetica', '', 10);
$pdf->Cell(60, 7, str_pad($idpresupuesto, 6, '0', STR_PAD_LEFT), 0, 0);

$pdf->SetFont('helvetica', 'B', 10);
$pdf->Cell(30, 7, 'Fecha:', 0, 0);
$pdf->SetFont('helvetica', '', 10);
$pdf->Cell(0, 7, date('d/m/Y', strtotime($rspta['fecha_emision'])), 0, 1);

$pdf->SetFont('helvetica', 'B', 10);
$pdf->Cell(35, 7, 'Paciente:', 0, 0);
$pdf->SetFont('helvetica', '', 10);
$pdf->Cell(60, 7, substr($rspta['paciente'], 0, 35), 0, 0); // Limitar caracteres para evitar desbordes

$pdf->SetFont('helvetica', 'B', 10);
$pdf->Cell(30, 7, 'Vencimiento:', 0, 0);
$pdf->SetFont('helvetica', '', 10);
$pdf->Cell(0, 7, date('d/m/Y', strtotime($rspta['fecha_vencimiento'])), 0, 1);

$pdf->Ln(8);

// Tabla de procedimientos
$pdf->SetFont('helvetica', 'B', 10);
$pdf->SetFillColor(52, 152, 219);
$pdf->SetTextColor(255, 255, 255);

// Ajuste de anchos para cuadrar 100% con márgenes (total 180mm)
// 75 + 15 + 15 + 15 + 20 + 20 + 20 = 180
$pdf->Cell(75, 8, 'Procedimiento', 1, 0, 'C', true);
$pdf->Cell(15, 8, 'Diente', 1, 0, 'C', true);
$pdf->Cell(15, 8, 'Cara', 1, 0, 'C', true);
$pdf->Cell(15, 8, 'Cant.', 1, 0, 'C', true);
$pdf->Cell(20, 8, 'Precio', 1, 0, 'C', true);
$pdf->Cell(20, 8, 'Desc.', 1, 0, 'C', true);
$pdf->Cell(20, 8, 'Subtotal', 1, 1, 'C', true);

// Detalles
$pdf->SetFont('helvetica', '', 9);
$pdf->SetTextColor(0, 0, 0);
$pdf->SetFillColor(245, 245, 245);

$rspta_detalle = $presupuesto->listarDetalle($idpresupuesto);
$fill = false;

while ($detalle = $rspta_detalle->fetch_object()) {
    // MultiCell para procedimiento si es muy largo, pero por simplicidad y estética tabular usamos Cell con recorte
    $pdf->Cell(75, 7, substr($detalle->procedimiento, 0, 40), 1, 0, 'L', $fill);
    $pdf->Cell(15, 7, $detalle->diente ? $detalle->diente : '-', 1, 0, 'C', $fill);
    $pdf->Cell(15, 7, $detalle->cara ? substr($detalle->cara, 0, 3) : '-', 1, 0, 'C', $fill); // Cara abreviada
    $pdf->Cell(15, 7, $detalle->cantidad, 1, 0, 'C', $fill);
    $pdf->Cell(20, 7, '$' . number_format($detalle->precio_unitario, 2), 1, 0, 'R', $fill);
    $pdf->Cell(20, 7, '$' . number_format($detalle->descuento, 2), 1, 0, 'R', $fill);
    $pdf->Cell(20, 7, '$' . number_format($detalle->subtotal, 2), 1, 1, 'R', $fill);
    $fill = !$fill;
}

// Totales
// Alinear totales a la derecha coincidiendo con las columnas
$pdf->Ln(2);
$pdf->SetFont('helvetica', 'B', 10);

// Espacio vacío hasta la columna de totales (75+15+15+15 = 120)
$pdf->Cell(120, 7, '', 0, 0);
$pdf->Cell(40, 7, 'SUBTOTAL:', 1, 0, 'R');
$pdf->Cell(20, 7, '$' . number_format($rspta['subtotal'], 2), 1, 1, 'R');

$pdf->Cell(120, 7, '', 0, 0);
$pdf->Cell(40, 7, 'DESCUENTO:', 1, 0, 'R');
$pdf->Cell(20, 7, '$' . number_format($rspta['descuento_total'], 2), 1, 1, 'R');

$pdf->SetFillColor(46, 204, 113);
$pdf->SetTextColor(255, 255, 255);
$pdf->Cell(120, 8, '', 0, 0);
$pdf->Cell(40, 8, 'TOTAL:', 1, 0, 'R', true);
$pdf->Cell(20, 8, '$' . number_format($rspta['total'], 2), 1, 1, 'R', true);

$pdf->SetTextColor(0, 0, 0);

// Plan de cuotas si existe
if ($plan) {
    $pdf->Ln(5);
    $pdf->SetFont('helvetica', 'B', 12);
    $pdf->SetFillColor(155, 89, 182);
    $pdf->SetTextColor(255, 255, 255);
    $pdf->Cell(0, 8, 'PLAN DE CUOTAS', 0, 1, 'C', true);
    $pdf->Ln(2);

    $pdf->SetFont('helvetica', '', 10);
    $pdf->SetTextColor(0, 0, 0);

    $pdf->SetFont('helvetica', 'B', 10);
    $pdf->Cell(50, 6, 'Número de Cuotas:', 0, 0);
    $pdf->SetFont('helvetica', '', 10);
    $pdf->Cell(50, 6, $plan['numero_cuotas'], 0, 0);

    $pdf->SetFont('helvetica', 'B', 10);
    $pdf->Cell(40, 6, 'Periodicidad:', 0, 0);
    $pdf->SetFont('helvetica', '', 10);
    $pdf->Cell(0, 6, $plan['periodicidad'], 0, 1);

    $pdf->SetFont('helvetica', 'B', 10);
    $pdf->Cell(50, 6, 'Monto por Cuota:', 0, 0);
    $pdf->SetFont('helvetica', '', 10);
    $pdf->Cell(50, 6, '$' . number_format($plan['monto_cuota'], 2), 0, 1);

    $pdf->Ln(3);

    // Tabla de cuotas
    $pdf->SetFont('helvetica', 'B', 9);
    $pdf->SetFillColor(155, 89, 182);
    $pdf->SetTextColor(255, 255, 255);
    $pdf->Cell(60, 7, 'Cuota', 1, 0, 'C', true);
    $pdf->Cell(40, 7, 'Fecha Vencimiento', 1, 0, 'C', true);
    $pdf->Cell(40, 7, 'Monto', 1, 0, 'C', true);
    $pdf->Cell(55, 7, 'Estado', 1, 1, 'C', true);

    $pdf->SetFont('helvetica', '', 9);
    $pdf->SetTextColor(0, 0, 0);

    $rspta_cuotas = $cuota_model->listarCuotasPorPlan($plan['idplan_cuotas']);
    $fill = false;

    while ($cuota = $rspta_cuotas->fetch_object()) {
        $pdf->Cell(60, 6, 'Cuota ' . $cuota->numero_cuota, 1, 0, 'L', $fill);
        $pdf->Cell(40, 6, date('d/m/Y', strtotime($cuota->fecha_vencimiento)), 1, 0, 'C', $fill);
        $pdf->Cell(40, 6, '$' . number_format($cuota->monto, 2), 1, 0, 'R', $fill);
        $pdf->Cell(55, 6, $cuota->estado, 1, 1, 'C', $fill);
        $fill = !$fill;
    }
}

// Observaciones
if ($rspta['observaciones']) {
    $pdf->Ln(5);
    $pdf->SetFont('helvetica', 'B', 10);
    $pdf->Cell(0, 6, 'Observaciones:', 0, 1);
    $pdf->SetFont('helvetica', '', 9);
    $pdf->MultiCell(0, 5, $rspta['observaciones'], 0, 'L');
}

// Pie de página
$pdf->Ln(10);
$pdf->SetFont('helvetica', 'I', 8);
$pdf->SetTextColor(128, 128, 128);
$pdf->Cell(0, 5, 'Este presupuesto tiene una validez hasta el ' . date('d/m/Y', strtotime($rspta['fecha_vencimiento'])), 0, 1, 'C');
$pdf->Cell(0, 5, 'Generado el ' . date('d/m/Y H:i'), 0, 1, 'C');

// Salida del PDF
// Crear carpeta si no existe
$baseDir = dirname(__DIR__);
$carpetaPresupuestos = $baseDir . '/files/presupuestos';
if (!file_exists($carpetaPresupuestos)) {
    mkdir($carpetaPresupuestos, 0755, true);
}

$nombreArchivo = 'Presupuesto_' . str_pad($idpresupuesto, 6, '0', STR_PAD_LEFT) . '.pdf';
$rutaGuardado = $carpetaPresupuestos . '/' . $nombreArchivo;

// Guardar en el servidor (F)
$pdf->Output($rutaGuardado, 'F');

// Mostrar en el navegador (I)
$pdf->Output($nombreArchivo, 'I');
?>