<?php
require_once 'vendor/autoload.php'; // Asegúrate de tener dompdf cargado via Composer
use Dompdf\Dompdf;
use Dompdf\Options;

// 1. Configurar Dompdf
$options = new Options();
$options->set('isHtml5ParserEnabled', true);
$options->set('isRemoteEnabled', true); // Por si usas imágenes o logos externos
$dompdf = new Dompdf($options);

// 2. Simulación de datos (Aquí pondrías el resultado de tu consulta SQL organizada)
// Lo ideal es estructurarlo por [Cuenta][Tipo_Cuenta] para poder subtotalizar fácilmente.
$reporte_datos = [
    'Caja Chica' => [
        'Efectivo' => [
            ['fecha' => '2026-05-15', 'tipo' => 'INGRESO', 'detalle' => 'Cobro Cliente X', 'monto' => 150000],
            ['fecha' => '2026-05-16', 'tipo' => 'EGRESO', 'detalle' => 'Compra de Papelería', 'monto' => 45000],
        ]
    ]
];

// 3. Construir el HTML / CSS
$html = '
<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <title>Reporte de Ingresos y Egresos</title>
    <style>
        body { font-family: "Helvetica", "Arial", sans-serif; font-size: 12px; color: #333; }
        .header { text-align: center; margin-bottom: 30px; }
        .header h1 { margin: 0; font-size: 20px; color: #2C3E50; }
        .header p { margin: 5px 0; color: #7F8C8D; }
        
        .table-reporte { width: 100%; border-collapse: collapse; margin-bottom: 25px; page-break-inside: avoid; }
        .table-reporte th { background-color: #34495E; color: white; padding: 8px; text-align: left; }
        .table-reporte td { padding: 8px; border-bottom: 1px solid #BDC3C7; }
        
        .seccion-cuenta { background-color: #ECF0F1; font-weight: bold; font-size: 13px; padding: 8px; }
        .seccion-tipo { background-color: #F8F9F9; font-weight: bold; padding: 6px 8px; color: #2980B9; }
        
        .monto-ingreso { color: #27AE60; text-align: right; }
        .monto-egreso { color: #C0392B; text-align: right; }
        .text-right { text-align: right; }
        .font-bold { font-weight: bold; }
        
        /* Footer para el número de página */
        @page { margin: 100px 25px; }
        header { position: fixed; top: -60px; left: 0px; right: 0px; height: 50px; }
        footer { position: fixed; bottom: -60px; left: 0px; right: 0px; height: 30px; text-align: center; font-size: 10px; color: #95A5A6; }
        .pagenum:before { content: counter(page); }
    </style>
</head>
<body>

    <footer>
        Página <span class="pagenum"></span>
    </footer>

    <div class="header">
        <h1>Reporte Financiero de Ingresos y Egresos</h1>
        <p>Flujo de Caja por Cuentas y Tipo de Cuentas</p>
        <p>Fecha de Emisión: ' . date('d/m/Y') . '</p>
    </div>';

// 4. Renderizar las tablas dinámicamente
foreach ($reporte_datos as $cuenta => $tipos_cuenta) {
    $html .= '<table class="table-reporte">';
    $html .= '<thead>';
    $html .= '<tr><th colspan="4" class="seccion-cuenta">CUENTA: ' . htmlspecialchars($cuenta) . '</th></tr>';
    $html .= '</thead>';
    $html .= '<tbody>';

    foreach ($tipos_cuenta as $tipo_cuenta => $movimientos) {
        $html .= '<tr><td colspan="4" class="seccion-tipo">Tipo de Cuenta: ' . htmlspecialchars($tipo_cuenta) . '</td></tr>';
        $html .= '<tr style="font-weight:bold; background-color: #f2f2f2;">
                    <td width="15%">Fecha</td>
                    <td width="55%">Detalle / Concepto</td>
                    <td width="15%" class="text-right">Ingresos</td>
                    <td width="15%" class="text-right">Egresos</td>
                  </tr>';
        
        $subtotal_ingresos = 0;
        $subtotal_egresos = 0;

        foreach ($movimientos as $mov) {
            $html .= '<tr>';
            $html .= '<td>' . date('d/m/Y', strtotime($mov['fecha'])) . '</td>';
            $html .= '<td>' . htmlspecialchars($mov['detalle']) . '</td>';
            
            if ($mov['tipo'] == 'INGRESO') {
                $html .= '<span class="monto-ingreso"><td>' . number_format($mov['monto'], 0, ',', '.') . '</td></span>';
                $html .= '<td class="text-right">-</td>';
                $subtotal_ingresos += $mov['monto'];
            } else {
                $html .= '<td class="text-right">-</td>';
                $html .= '<span class="monto-egreso"><td>' . number_format($mov['monto'], 0, ',', '.') . '</td></span>';
                $subtotal_egresos += $mov['monto'];
            }
            $html .= '</tr>';
        }

        // Fila de Subtotales por Tipo de Cuenta
        $saldo_tipo = $subtotal_ingresos - $subtotal_egresos;
        $html .= '<tr style="background-color: #fafafa;">';
        $html .= '<td colspan="2" class="text-right font-bold">Subtotal ' . htmlspecialchars($tipo_cuenta) . ':</td>';
        $html .= '<td class="text-right font-bold monto-ingreso">' . number_format($subtotal_ingresos, 0, ',', '.') . '</td>';
        $html .= '<td class="text-right font-bold monto-egreso">' . number_format($subtotal_egresos, 0, ',', '.') . '</td>';
        $html .= '</tr>';
        $html .= '<tr>';
        $html .= '<td colspan="2" class="text-right font-bold">Balance Neto:</td>';
        $html .= '<td colspan="2" class="text-right font-bold ' . ($saldo_tipo >= 0 ? 'monto-ingreso' : 'monto-egreso') . '">' . number_format($saldo_tipo, 0, ',', '.') . '</td>';
        $html .= '</tr>';
    }

    $html .= '</tbody>';
    $html .= '</table><br>';
}

$html .= '
</body>
</html>';

// 5. Lanzar Dompdf
$dompdf->loadHtml($html);
$dompdf->setPaper('A4', 'portrait'); // Tamaño A4, vertical
$dompdf->render();

// 6. Forzar descarga o ver en navegador
$dompdf->stream("reporte_ingresos_egresos.pdf", array("Attachment" => false)); // false = ver en navegador, true = descargar