<?php
// vista/reportes/reporte_ventas_pdf.php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

// Limpiar buffer para evitar que basura del sistema dañe el PDF
if (ob_get_contents()) ob_end_clean();

require('../../fpdf/fpdf.php');
require_once('../../modelo/Db.php');

$db = new clsbdd();
$db->ejecutar("SET NAMES 'utf8'");

$desde = $_GET['desde'] ?? date('Y-m-d');
$hasta = $_GET['hasta'] ?? date('Y-m-d');

// Función auxiliar para codificación ISO (FPDF no soporta UTF-8 directamente)
function txt($texto) {
    if ($texto === null) return '';
    return mb_convert_encoding($texto, 'ISO-8859-1', 'UTF-8');
}

class PDF extends FPDF {
    protected $fecha_inicio;
    protected $fecha_fin;

    function setFechas($d, $h) {
        $this->fecha_inicio = $d;
        $this->fecha_fin = $h;
    }

    function Header() {
        $ruta_logo = '../../assets/img/logo.jpeg'; 
        if(file_exists($ruta_logo)){
            $this->Image($ruta_logo, 10, 8, 45); 
        }
        
        $this->SetFont('Arial', 'B', 15);
        $this->SetTextColor(200, 0, 0); 
        $this->Cell(60); 
        $this->Cell(0, 10, txt('CAR WASH J PALLASCO'), 0, 1, 'R');
        
        $this->SetFont('Arial', 'I', 9);
        $this->SetTextColor(100);
        $this->Cell(0, 5, txt('FILTROS & ACEITES - Reporte Gerencial'), 0, 1, 'R');
        $this->Ln(15);

        $this->SetFillColor(230, 230, 230);
        $this->SetTextColor(0);
        $this->SetFont('Arial', 'B', 11);
        $this->Cell(0, 8, txt("REPORTE DETALLADO POR MÉTODO DE PAGO"), 0, 1, 'C', true);
        
        $this->SetFont('Arial', '', 9);
        $this->Cell(0, 7, txt("Periodo: $this->fecha_inicio al $this->fecha_fin"), 0, 1, 'C');
        $this->Ln(3);
    }

    function subHeaderTabla($titulo, $colorR, $colorG, $colorB) {
        $this->SetFillColor($colorR, $colorG, $colorB);
        $this->SetTextColor(255);
        $this->SetFont('Arial', 'B', 10);
        $this->Cell(190, 8, txt($titulo), 1, 1, 'L', true);
        
        $this->SetFillColor(245, 245, 245);
        $this->SetTextColor(0);
        $this->SetFont('Arial', 'B', 8);
        $this->Cell(25, 7, 'FECHA', 1, 0, 'C', true);
        $this->Cell(20, 7, 'PLACA', 1, 0, 'C', true);
        $this->Cell(95, 7, txt('DETALLE / SERVICIOS'), 1, 0, 'L', true);
        $this->Cell(30, 7, 'REF / CLIENTE', 1, 0, 'C', true);
        $this->Cell(20, 7, 'VALOR', 1, 1, 'R', true);
    }

    function SubtotalTabla($monto) {
        $this->SetFont('Arial', 'B', 9);
        $this->Cell(170, 8, 'SUBTOTAL GRUPO: ', 1, 0, 'R');
        $this->Cell(20, 8, '$' . number_format($monto, 2), 1, 1, 'R');
        $this->Ln(5);
    }

    function Footer() {
        $this->SetY(-15);
        $this->SetFont('Arial', 'I', 8);
        $this->SetTextColor(150);
        $this->Cell(0, 10, txt('Página ').$this->PageNo().'/{nb}', 0, 0, 'C');
    }
}

// 3. CONSULTA SQL UNIFICADA (Idéntica al Monitor para que cuadren los números)
$sql = "SELECT * FROM (
            SELECT 
                o.ord_fecha as fecha, 
                v.veh_placa as placa, 
                p.pag_metodo as metodo, 
                p.pag_numerocomprobante as referencia,
                (SELECT SUM(det_subtotal) FROM car_ordendetalles WHERE ord_id = o.ord_id) as total,
                GROUP_CONCAT(DISTINCT 
                    CASE 
                        WHEN d.det_tipoitem = 'Servicio' THEN IFNULL(s.ser_nombre, 'Servicio Especial')
                        ELSE IFNULL(i.pro_nombre, 'Producto Adicional')
                    END SEPARATOR ', '
                ) as items,
                vc.veh_propietario as deudor,
                'LAVADO' as tipo
            FROM car_ordenestrabajo o
            INNER JOIN car_clientesvehiculos v ON o.veh_id = v.veh_id
            LEFT JOIN car_ordendetalles d ON o.ord_id = d.ord_id
            LEFT JOIN car_catservicios s ON d.det_itemid = s.ser_id AND d.det_tipoitem = 'Servicio'
            LEFT JOIN car_invproductos i ON d.det_itemid = i.pro_id AND d.det_tipoitem = 'Producto'
            LEFT JOIN car_clientesvehiculos vc ON o.veh_id_cliente_credito = vc.veh_id
            LEFT JOIN car_pagoscomprobantes p ON o.ord_id = p.ord_id
            WHERE o.ord_fecha BETWEEN '$desde' AND '$hasta' AND o.ord_estado = 'Activo'
            GROUP BY o.ord_id

            UNION ALL

            SELECT 
                DATE(ve.ven_fecha) as fecha, 
                'TIENDA' as placa, 
                ve.ven_tipo_pago as metodo, 
                ve.ven_comprobante as referencia, 
                ve.ven_total as total,
                'VENTA DIRECTA DE PRODUCTOS' as items,
                NULL as deudor,
                'PRODUCTO' as tipo
            FROM car_ventas ve
            WHERE DATE(ve.ven_fecha) BETWEEN '$desde' AND '$hasta' AND ve.ven_estado = 1
        ) AS resumen
        ORDER BY CASE metodo 
            WHEN 'Efectivo' THEN 1 
            WHEN 'Transferencia' THEN 2 
            WHEN 'Credito' THEN 3 
            ELSE 4 END, fecha ASC";

$res = $db->ejecutar($sql);

$grupos = ['Efectivo' => [], 'Transferencia' => [], 'Credito' => []];
if ($res) {
    while($row = $res->fetch_assoc()) {
        $m = $row['metodo'] ?: 'Efectivo'; // Por defecto efectivo si no hay pago registrado
        if(isset($grupos[$m])) {
            $grupos[$m][] = $row;
        } else {
            $grupos['Efectivo'][] = $row; // Otros métodos caen aquí para evitar pérdida de datos
        }
    }
}

// 4. GENERACIÓN DEL PDF
$pdf = new PDF('P', 'mm', 'A4');
$pdf->setFechas($desde, $hasta);
$pdf->AliasNbPages();
$pdf->AddPage();

$totales_finales = ['Efectivo' => 0, 'Transferencia' => 0, 'Credito' => 0];

// --- RENDERIZADO GRUPO: EFECTIVO ---
$pdf->subHeaderTabla('INGRESOS EN EFECTIVO (CAJA FISICA)', 46, 125, 50);
if(count($grupos['Efectivo']) > 0) {
    foreach($grupos['Efectivo'] as $r) {
        $pdf->SetFont('Arial', '', 8);
        $pdf->Cell(25, 7, $r['fecha'], 1, 0, 'C');
        $pdf->Cell(20, 7, $r['placa'], 1, 0, 'C');
        $pdf->Cell(95, 7, txt(substr($r['items'], 0, 60)), 1, 0, 'L');
        $pdf->Cell(30, 7, 'CONTADO', 1, 0, 'C');
        $pdf->Cell(20, 7, number_format($r['total'], 2), 1, 1, 'R');
        $totales_finales['Efectivo'] += $r['total'];
    }
} else { $pdf->Cell(190, 7, 'No hay movimientos', 1, 1, 'C'); }
$pdf->SubtotalTabla($totales_finales['Efectivo']);

// --- RENDERIZADO GRUPO: TRANSFERENCIA ---
$pdf->subHeaderTabla('TRANSFERENCIAS BANCARIAS', 0, 80, 150);
if(count($grupos['Transferencia']) > 0) {
    foreach($grupos['Transferencia'] as $r) {
        $pdf->SetFont('Arial', '', 8);
        $pdf->Cell(25, 7, $r['fecha'], 1, 0, 'C');
        $pdf->Cell(20, 7, $r['placa'], 1, 0, 'C');
        $pdf->Cell(95, 7, txt(substr($r['items'], 0, 60)), 1, 0, 'L');
        $pdf->Cell(30, 7, txt(substr($r['referencia'], 0, 18)), 1, 0, 'C');
        $pdf->Cell(20, 7, number_format($r['total'], 2), 1, 1, 'R');
        $totales_finales['Transferencia'] += $r['total'];
    }
} else { $pdf->Cell(190, 7, 'No hay movimientos', 1, 1, 'C'); }
$pdf->SubtotalTabla($totales_finales['Transferencia']);

// --- RENDERIZADO GRUPO: CRÉDITO ---
$pdf->subHeaderTabla('CUENTAS POR COBRAR (CREDITOS)', 180, 90, 0);
if(count($grupos['Credito']) > 0) {
    foreach($grupos['Credito'] as $r) {
        $pdf->SetFont('Arial', '', 8);
        $pdf->Cell(25, 7, $r['fecha'], 1, 0, 'C');
        $pdf->Cell(20, 7, $r['placa'], 1, 0, 'C');
        $pdf->Cell(95, 7, txt(substr($r['items'] ?? '', 0, 55)), 1, 0, 'L');
        $pdf->Cell(30, 7, txt(substr($r['deudor'] ?? 'S/N', 0, 18)), 1, 0, 'C');
        $pdf->Cell(20, 7, number_format($r['total'], 2), 1, 1, 'R');
        $totales_finales['Credito'] += $r['total'];
    }
} else { $pdf->Cell(190, 7, 'No hay movimientos', 1, 1, 'C'); }
$pdf->SubtotalTabla($totales_finales['Credito']);

// --- RESUMEN FINAL ---
$pdf->Ln(5);
if($pdf->GetY() > 250) $pdf->AddPage(); // Salto de página preventivo para el cuadro final

$pdf->SetFillColor(255, 255, 200);
$pdf->SetFont('Arial', 'B', 10);
$pdf->Cell(190, 8, 'CUADRO RESUMEN DE RECAUDACION', 1, 1, 'C', true);
$pdf->SetFont('Arial', '', 9);

$pdf->Cell(150, 7, 'TOTAL EFECTIVO (PARA CAJA):', 1, 0, 'R');
$pdf->Cell(40, 7, '$'.number_format($totales_finales['Efectivo'], 2), 1, 1, 'R');

$pdf->Cell(150, 7, 'TOTAL TRANSFERENCIAS (BANCARIZADO):', 1, 0, 'R');
$pdf->Cell(40, 7, '$'.number_format($totales_finales['Transferencia'], 2), 1, 1, 'R');

$pdf->Cell(150, 7, 'TOTAL POR COBRAR (CUENTAS PENDIENTES):', 1, 0, 'R');
$pdf->Cell(40, 7, '$'.number_format($totales_finales['Credito'], 2), 1, 1, 'R');

$pdf->SetFont('Arial', 'B', 10);
$pdf->SetFillColor(0, 51, 102);
$pdf->SetTextColor(255);
$gran_total = array_sum($totales_finales);
$pdf->Cell(150, 10, 'TOTAL RECAUDADO DEL PERIODO:', 1, 0, 'R', true);
$pdf->Cell(40, 10, '$'.number_format($gran_total, 2), 1, 1, 'R', true);

// Limpieza final de buffer y salida
if (ob_get_length()) ob_end_clean();
$pdf->Output('I', 'Reporte_Ventas_JPallasco.pdf');