<?php
require_once $_SERVER['DOCUMENT_ROOT'] . '/auth/AuthService.php';
AuthService::startSession(); // Iniciar la sesión al principio

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
// gastos2.php
//include('check_auth.php');
include('conexion.php');
if (!$local_conn2) {
    die("Error de conexión a la base de datos de gastos: " . mysqli_connect_error());
}

// Inicializar variables de filtros de gastos 
$date_filter = $_GET['date_filter'] ?? '';
$client_filter_gasto = $_GET['client_gasto'] ?? '';
$bank_filter_gasto = $_GET['bank_gasto'] ?? '';
$group_filter = $_GET['group_filter'] ?? '';
$intermediary_filter = $_GET['intermediary_filter'] ?? '';
$date_from_custom = $_GET['date_from'] ?? '';
$date_to_custom = $_GET['date_to'] ?? '';

// Establecer el rango de fechas según los filtros
if (!empty($date_from_custom) && !empty($date_to_custom)) {
    // Si el usuario proporcionó fechas personalizadas, usarlas
    $date_from_gasto = $date_from_custom;
    $date_to_gasto = $date_to_custom;
} else {
    // Si no se proporcionaron fechas personalizadas, usar el filtro predefinido
    switch ($date_filter) {
        case 'diario':
            $date_from_gasto = date('Y-m-d');
            $date_to_gasto = date('Y-m-d');
            break;
        case 'semanal':
            $date_from_gasto = date('Y-m-d', strtotime('-1 week'));
            $date_to_gasto = date('Y-m-d');
            break;
        case 'mensual':
            $date_from_gasto = date('Y-m-01');
            $date_to_gasto = date('Y-m-t');
            break;
        case 'mensual_anterior':
            $date_from_gasto = date('Y-m-01', strtotime('-1 month'));
            $date_to_gasto = date('Y-m-t', strtotime('-1 month')); // Corregido para obtener el último día del mes anterior
            break;
        default:
            // Si no se seleccionó ningún filtro, establecer un rango amplio
            $date_from_gasto = date('Y-m-d', strtotime('-1 week'));
            $date_to_gasto = date('Y-m-d');   // Hasta hoy
            break;
    }
}

// Validar que la fecha desde no sea mayor que la fecha hasta
if ($date_from_gasto > $date_to_gasto) {
    die("La fecha 'Desde' no puede ser mayor que la fecha 'Hasta'.");
}

// Obtener la tasa de cambio del dólar para la fecha seleccionada o la más reciente
$tasa_dolar = obtenerTasaDolarGastos($date_to_gasto);

// Obtener los filtros para los gastos
$filters_gastos = obtenerFiltrosGastos($date_from_gasto, $date_to_gasto, $client_filter_gasto, $bank_filter_gasto, $group_filter, $intermediary_filter);

// Obtener los resultados de gastos según los filtros
$result_gastos = obtenerGastos($local_conn2, $filters_gastos);

// Generar la tabla de gastos con totales por grupo
$tabla_gastos = generarTablaGastos($result_gastos, ['fecha', 'grupo', 'intermediario', 'descripcion_detallada', 'banco', 'cliente'], $local_conn2);

// Obtener resúmenes
$resumen_general = generarResumenGeneral($local_conn2, $filters_gastos, $tasa_dolar);
$resumen_por_grupo = generarResumenPorGrupo($local_conn2, $filters_gastos, $tasa_dolar);
$resumen_por_intermediario = generarResumenPorIntermediario($local_conn2, $filters_gastos, $tasa_dolar);
$resumen_por_banco = generarResumenPorBanco($local_conn2, $filters_gastos, $tasa_dolar);
$resumen_por_cliente = generarResumenPorCliente($local_conn2, $filters_gastos, $tasa_dolar);
$resumen_por_bancobs = generarResumenPorBancobs($local_conn2, $filters_gastos);


/** Funciones **/

// Función para obtener los filtros aplicados a los gastos
// NOTA: Usa estructura de contabilidad.gastos (grupo, intermediario son columnas directas)
function obtenerFiltrosGastos($date_from, $date_to, $client_filter, $bank_filter, $group_filter = '', $intermediary_filter = '')
{
    $filters = [];
    if ($date_from)
        $filters[] = "fecha >= '$date_from'";
    if ($date_to)
        $filters[] = "fecha <= '$date_to'";
    // cliente no existe en contabilidad.gastos, ignorar este filtro
    if ($bank_filter)
        $filters[] = "banco LIKE '%$bank_filter%'";
    if ($group_filter)
        $filters[] = "grupo LIKE '%$group_filter%'";
    if ($intermediary_filter)
        $filters[] = "intermediario LIKE '%$intermediary_filter%'";
    return $filters;
}

// Función para obtener la tasa de cambio del dólar
function obtenerTasaDolarGastos($fecha)
{
    require_once $_SERVER['DOCUMENT_ROOT'] . '/shared/services/ExchangeRateService.php';
    return \ExchangeRateService::getRateForDate($fecha);
}


// Función para obtener los resultados de los gastos filtrados
// NOTA: Usa estructura de contabilidad.gastos con columnas directas
function obtenerGastos($conn, $filters)
{
    $sql = "SELECT id, banco, monto, monto_dolar, descripcion_gen as descripcion, fecha, 
            origen as cliente,
            grupo,
            intermediario,
            descripcion_detallada
            FROM gastos WHERE " . implode(' AND ', array_filter($filters)) . " ORDER BY fecha DESC";
    return $conn->query($sql);
}

// Función para generar la tabla de gastos con totales por grupo
function generarTablaGastos($result, $columns, $conn)
{
    if ($result && $result->num_rows > 0) {
        $grouped_results = [];
        while ($row = $result->fetch_assoc()) {
            include('conexion.php');
            $fecha_gasto = $row['fecha'];
            $tasa_dolar = obtenerTasaDolarGastos($fecha_gasto);

            $banco = strtolower($row['banco']);
            
            // Lógica unificada: Usar valor guardado si existe, sino calcular
            if (isset($row['monto_dolar']) && $row['monto_dolar'] > 0) {
                $monto_en_usd = $row['monto_dolar'];
            } else {
                $monto_en_usd = in_array($banco, ['venezuela', 'mercantil']) ? $row['monto'] / $tasa_dolar : $row['monto'];
            }
            
            $row['tasa_oficial'] = $tasa_dolar;
            $row['monto_en_usd'] = $monto_en_usd;

            $group_key = htmlspecialchars($row['grupo']);
            if (!isset($grouped_results[$group_key])) {
                $grouped_results[$group_key] = [
                    'total_grupo' => 0,
                    'rows' => []
                ];
            }
            $grouped_results[$group_key]['rows'][] = $row;
            $grouped_results[$group_key]['total_grupo'] += $monto_en_usd;
        }

        $tabla = '<div class="table-responsive">';
        $tabla .= '<table class="table table-hover" id="gastosTable">';
        $tabla .= '<thead><tr class="bg-primary text-white">';
        foreach ($columns as $column) {
            $tabla .= '<th class="py-3 px-4">' . htmlspecialchars(ucfirst($column)) . '</th>';
        }
        $tabla .= '<th class="py-3 px-4">Monto $</th>';
        $tabla .= '<th class="py-3 px-4">BS/$</th>';
        $tabla .= '<th class="py-3 px-4 text-end">Acciones</th>';
        $tabla .= '</tr></thead><tbody>';

        // Colores alternados para grupos
        $group_colors = ['#f8f9fa', '#e9ecef', '#f1f3f5', '#e7f5ff', '#f3f0ff'];
        $color_index = 0;

        foreach ($grouped_results as $group => $data) {
            $color = $group_colors[$color_index % count($group_colors)];
            $color_index++;

            // Encabezado del grupo
            $tabla .= "<tr class='group-header' data-group='{$group}' style='background-color: {$color}; cursor: pointer;'>";
            $tabla .= "<td colspan='" . (count($columns) + 3) . "' class='py-3 px-4'>";
            $tabla .= "<div class='d-flex justify-content-between align-items-center'>";
            $tabla .= "<div><i class='fas fa-chevron-right me-2 group-icon'></i><strong>{$group}</strong></div>";
            $tabla .= "<div><span class='badge bg-primary rounded-pill me-2'>" . count($data['rows']) . " registros</span>";
            $tabla .= "<strong>Total: " . number_format($data['total_grupo'], 2) . " USD</strong></div>";
            $tabla .= "</div></td></tr>";

            // Filas del grupo (inicialmente ocultas)
            foreach ($data['rows'] as $row) {
                $tabla .= "<tr class='group-data group-{$group}' style='display: none;'>";
                foreach ($columns as $column) {
                    $tabla .= '<td class="py-2 px-4 border-bottom">' . htmlspecialchars($row[$column]) . '</td>';
                }
                $tabla .= '<td class="py-2 px-4 border-bottom fw-bold">' . number_format($row['monto_en_usd'], 2) . '</td>';
                $tabla .= '<td class="py-2 px-4 border-bottom">' . number_format($row['tasa_oficial'], 2) . '</td>';
                $tabla .= "<td class='py-2 px-4 border-bottom text-end'>
                            <div class='btn-group btn-group-sm'>
                                <a href='edit_gastos.php?id={$row['id']}&table=gastos' class='btn btn-outline-primary'>
                                    <i class='fas fa-edit'></i>
                                </a> 
                                <a href='eliminar.php?id={$row['id']}&table=gastos' class='btn btn-outline-danger' onclick=\"return confirm('¿Está seguro de que desea eliminar este registro?');\">
                                    <i class='fas fa-trash'></i>
                                </a>
                            </div>
                          </td>";
                $tabla .= '</tr>';
            }
        }
        $tabla .= '</tbody></table></div>';
        return $tabla;
    } else {
        return '<div class="alert alert-info">No hay resultados para mostrar.</div>';
    }
}

// Función auxiliar para aclarar colores
function lightenColor($color, $percent)
{
    $color = str_replace('#', '', $color);
    if (strlen($color) == 3) {
        $color = str_repeat(substr($color, 0, 1), 2) . str_repeat(substr($color, 1, 1), 2) . str_repeat(substr($color, 2, 1), 2);
    }
    $rgb = [
        hexdec(substr($color, 0, 2)),
        hexdec(substr($color, 2, 2)),
        hexdec(substr($color, 4, 2))
    ];

    for ($i = 0; $i < 3; $i++) {
        $rgb[$i] = min(255, $rgb[$i] + round(2.55 * $percent));
    }
    return '#' . sprintf('%02x%02x%02x', $rgb[0], $rgb[1], $rgb[2]);
}

// Función para generar el resumen general
function generarResumenGeneral($conn, $filters)
{
    $sql = "
        SELECT 
            COUNT(*) AS total_registros,
            SUM(CASE 
                WHEN monto_dolar IS NOT NULL AND monto_dolar > 0 THEN monto_dolar
                WHEN LOWER(gastos.banco) = 'venezuela' OR LOWER(gastos.banco) = 'mercantil' THEN gastos.monto / 
                    (SELECT tasa_oficial FROM contabilidad.tasas_dolar WHERE fecha = gastos.fecha ORDER BY fecha DESC LIMIT 1)
                ELSE gastos.monto
            END) AS total_monto
        FROM gastos";
    if (!empty($filters)) {
        $sql .= " WHERE " . implode(' AND ', array_filter($filters));
    }
    $result = $conn->query($sql);
    if (!$result) {
        die("Error en la consulta SQL para obtener el resumen general: " . $conn->error);
    }
    $row = $result->fetch_assoc();
    return [
        'total_registros' => $row['total_registros'],
        'total_monto' => $row['total_monto']
    ];
}




// Función para generar el resumen por grupo
// NOTA: Usa columna grupo directa de contabilidad.gastos
function generarResumenPorGrupo($conn, $filters)
{
    $sql = "
        SELECT 
            grupo,
            SUM(CASE 
                WHEN monto_dolar IS NOT NULL AND monto_dolar > 0 THEN monto_dolar
                WHEN LOWER(banco) = 'venezuela' OR LOWER(banco) = 'mercantil' THEN monto / 
                    COALESCE(
                        (SELECT tasa_oficial FROM contabilidad.tasas_dolar WHERE fecha <= gastos.fecha ORDER BY fecha DESC LIMIT 1),
                        1
                    )
                ELSE monto
            END) AS total_amount,
            COUNT(*) AS count_records
        FROM gastos
        WHERE " . implode(' AND ', array_filter($filters)) . "
        GROUP BY grupo
        ORDER BY total_amount DESC
    ";

    $result = $conn->query($sql);
    if (!$result) {
        die("Error en la consulta SQL para obtener el resumen por grupo: " . $conn->error);
    }

    // Generar la tabla de resumen
    $resumen = '<table class="table table-bordered table-sm">';
    $resumen .= '<thead class="thead-light"><tr><th>Grupo</th><th>Total $</th><th>Cantidad</th></tr></thead><tbody>';
    while ($row = $result->fetch_assoc()) {
        $resumen .= '<tr>';
        $resumen .= '<td>' . htmlspecialchars($row['grupo']) . '</td>';
        $resumen .= '<td>' . number_format($row['total_amount'], 2) . '</td>';
        $resumen .= '<td>' . htmlspecialchars($row['count_records']) . '</td>';
        $resumen .= '</tr>';
    }
    $resumen .= '</tbody></table>';
    return $resumen;
}



// Función para generar el resumen por intermediario
// NOTA: Usa columna intermediario directa de contabilidad.gastos
function generarResumenPorIntermediario($conn, $filters)
{
    $sql = "
        SELECT 
            intermediario,
            SUM(
                CASE 
                    WHEN monto_dolar IS NOT NULL AND monto_dolar > 0 THEN monto_dolar
                    WHEN LOWER(banco) = 'venezuela' OR LOWER(banco) = 'mercantil' THEN monto / 
                        COALESCE(
                            (SELECT tasa_oficial FROM contabilidad.tasas_dolar WHERE fecha <= gastos.fecha ORDER BY fecha DESC LIMIT 1),
                            1
                        )
                    ELSE monto
                END
            ) AS total_amount,
            COUNT(*) AS count_records
        FROM gastos
        " . (!empty($filters) ? "WHERE " . implode(' AND ', array_filter($filters)) : "") . "
        GROUP BY intermediario
        ORDER BY total_amount DESC
    ";

    $result = $conn->query($sql);
    if (!$result) {
        die("Error en la consulta SQL para obtener el resumen por intermediario: " . $conn->error);
    }

    // Generar la tabla de resumen
    $resumen = '<table class="table table-bordered table-sm">';
    $resumen .= '<thead class="thead-light"><tr><th>Intermediario</th><th>Total $</th><th>Cantidad</th></tr></thead><tbody>';

    if ($result->num_rows > 0) {
        while ($row = $result->fetch_assoc()) {
            $resumen .= '<tr>';
            $resumen .= '<td>' . htmlspecialchars($row['intermediario']) . '</td>';
            $resumen .= '<td>' . number_format($row['total_amount'], 2) . '</td>';
            $resumen .= '<td>' . htmlspecialchars($row['count_records']) . '</td>';
            $resumen .= '</tr>';
        }
    } else {
        $resumen .= '<tr><td colspan="3">No hay datos disponibles</td></tr>';
    }

    $resumen .= '</tbody></table>';
    return $resumen;
}

// Función para generar el resumen por banco
function generarResumenPorBanco($conn, $filters)
{
    $sql = "
        SELECT 
            g.banco,
            SUM(
                CASE 
                    WHEN g.monto_dolar IS NOT NULL AND g.monto_dolar > 0 THEN g.monto_dolar
                    WHEN LOWER(g.banco) = 'venezuela' OR LOWER(g.banco) = 'mercantil' THEN g.monto / 
                        COALESCE(
                            (SELECT tasa_oficial FROM contabilidad.tasas_dolar WHERE fecha <= g.fecha ORDER BY fecha DESC LIMIT 1),
                            1
                        )
                    ELSE g.monto
                END
            ) AS total_amount,
            COUNT(*) AS count_records
        FROM gastos AS g
        " . (!empty($filters) ? "WHERE " . implode(' AND ', array_filter($filters)) : "") . "
        GROUP BY g.banco
        ORDER BY total_amount DESC
    ";
    $result = $conn->query($sql);
    if (!$result) {
        die("Error en la consulta SQL para obtener el resumen por banco: " . $conn->error);
    }

    // Generar la tabla de resumen
    $resumen = '<table class="table table-bordered table-sm">';
    $resumen .= '<thead class="thead-light"><tr><th>Banco</th><th>Total $</th><th>Cantidad</th></tr></thead><tbody>';
    while ($row = $result->fetch_assoc()) {
        $resumen .= '<tr>';
        $resumen .= '<td>' . htmlspecialchars($row['banco']) . '</td>';
        $resumen .= '<td>' . number_format($row['total_amount'], 2) . '</td>';
        $resumen .= '<td>' . htmlspecialchars($row['count_records']) . '</td>';
        $resumen .= '</tr>';
    }
    $resumen .= '</tbody></table>';
    return $resumen;
}

// Función para generar el resumen por banco
function generarResumenPorBancobs($conn, $filters)
{
    $sql = "
        SELECT 
            g.banco,
            SUM(
                CASE 
                    WHEN LOWER(g.banco) = 'venezuela' OR LOWER(g.banco) = 'mercantil' THEN g.monto 
                    ELSE g.monto
                END
            ) AS total_amount,
            COUNT(*) AS count_records
        FROM gastos AS g
        " . (!empty($filters) ? "WHERE " . implode(' AND ', array_filter($filters)) : "") . "
        GROUP BY g.banco
        ORDER BY total_amount DESC
    ";
    $result = $conn->query($sql);
    if (!$result) {
        die("Error en la consulta SQL para obtener el resumen por banco: " . $conn->error);
    }

    // Generar la tabla de resumen
    $resumen = '<table class="table table-bordered table-sm">';
    $resumen .= '<thead class="thead-light"><tr><th>Banco</th><th>Total $</th><th>Cantidad</th></tr></thead><tbody>';
    while ($row = $result->fetch_assoc()) {
        $resumen .= '<tr>';
        $resumen .= '<td>' . htmlspecialchars($row['banco']) . '</td>';
        $resumen .= '<td>' . number_format($row['total_amount'], 2) . '</td>';
        $resumen .= '<td>' . htmlspecialchars($row['count_records']) . '</td>';
        $resumen .= '</tr>';
    }
    $resumen .= '</tbody></table>';
    return $resumen;
}

// Función para generar el resumen por cliente
// NOTA: En contabilidad.gastos la columna cliente es 'origen'
function generarResumenPorCliente($conn, $filters)
{
    $sql = "
        SELECT 
            g.origen as cliente,
            SUM(
                CASE 
                    WHEN g.monto_dolar IS NOT NULL AND g.monto_dolar > 0 THEN g.monto_dolar
                    WHEN LOWER(g.banco) = 'venezuela' OR LOWER(g.banco) = 'mercantil' THEN g.monto / 
                        COALESCE(
                            (SELECT tasa_oficial FROM tasas_dolar WHERE fecha <= g.fecha ORDER BY fecha DESC LIMIT 1),
                            1
                        )
                    ELSE g.monto
                END
            ) AS total_amount,
            COUNT(*) AS count_records
        FROM gastos AS g
        " . (!empty($filters) ? "WHERE " . implode(' AND ', array_filter($filters)) : "") . "
        GROUP BY g.origen
        ORDER BY total_amount DESC
    ";
    $result = $conn->query($sql);
    if (!$result) {
        die("Error en la consulta SQL para obtener el resumen por cliente: " . $conn->error);
    }

    // Generar la tabla de resumen
    $resumen = '<table class="table table-bordered table-sm">';
    $resumen .= '<thead class="thead-light"><tr><th>Cliente/Origen</th><th>Total $</th><th>Cantidad</th></tr></thead><tbody>';
    while ($row = $result->fetch_assoc()) {
        $resumen .= '<tr>';
        $resumen .= '<td>' . htmlspecialchars($row['cliente'] ?? 'Sin origen') . '</td>';
        $resumen .= '<td>' . number_format($row['total_amount'], 2) . '</td>';
        $resumen .= '<td>' . htmlspecialchars($row['count_records']) . '</td>';
        $resumen .= '</tr>';
    }
    $resumen .= '</tbody></table>';
    return $resumen;
}


?>

<!DOCTYPE html>
<html lang="es">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Gestión de Gastos</title>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
    <style>
        :root {
            --primary-color: #4361ee;
            --secondary-color: #3f37c9;
            --accent-color: #4cc9f0;
            --light-color: #f8f9fa;
            --dark-color: #212529;
            --success-color: #38b000;
            --info-color: #4895ef;
            --warning-color: #f77f00;
            --danger-color: #d90429;
        }

        body {
            background-color: #f5f7fa;
            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
        }

        .custom_container {
            max-width: 1200px;
            background: white;
            padding: 25px;
            border-radius: 12px;
            box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08);
            margin-top: 30px;
            margin-bottom: 30px;
        }

        .filter-btn.active {
            background-color: var(--primary-color);
            color: white;
        }

        .summary-section {
            margin-top: 40px;
        }

        .card {
            border: none;
            border-radius: 10px;
            box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
            transition: transform 0.3s ease;
            margin-bottom: 20px;
        }

        .card:hover {
            transform: translateY(-5px);
        }

        .card-header {
            background-color: var(--primary-color);
            color: white;
            border-radius: 10px 10px 0 0 !important;
            padding: 15px 20px;
            font-weight: 600;
        }

        .alert-custom {
            border-radius: 10px;
            border-left: 5px solid var(--primary-color);
        }

        .table-responsive {
            border-radius: 10px;
            overflow: hidden;
        }

        .table {
            border-collapse: separate;
            border-spacing: 0;
        }

        .table thead th {
            background-color: var(--primary-color);
            color: white;
            border: none;
            padding: 12px 15px;
        }

        .table tbody tr:nth-child(even) {
            background-color: rgba(67, 97, 238, 0.05);
        }

        .table tbody tr:hover {
            background-color: rgba(67, 97, 238, 0.1);
        }

        .btn-icon {
            display: inline-flex;
            align-items: center;
            justify-content: center;
        }

        .btn-icon i {
            margin-right: 8px;
        }

        .group-header {
            cursor: pointer;
            transition: background-color 0.2s;
            transition: all 0.3s ease;
        }

        .group-header:hover {
            background-color: rgba(0, 0, 0, 0.05) !important;
        }

        .nav-tabs .nav-link.active {
            border-bottom: 3px solid var(--primary-color);
            font-weight: 600;
            color: var(--primary-color);
        }

        .stat-card {
            background: white;
            border-radius: 10px;
            padding: 20px;
            box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
            margin-bottom: 20px;
            border-left: 4px solid var(--primary-color);
        }

        .stat-card h5 {
            color: var(--dark-color);
            font-size: 1rem;
            margin-bottom: 10px;
            display: flex;
            align-items: center;
        }

        .stat-card h5 i {
            margin-right: 10px;
            color: var(--primary-color);
        }

        .stat-card p {
            font-size: 1.5rem;
            font-weight: 700;
            color: var(--primary-color);
            margin-bottom: 0;
        }

        .stat-card small {
            color: #6c757d;
            font-size: 0.8rem;
        }

        .filter-container {
            background: white;
            padding: 20px;
            border-radius: 10px;
            box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
            margin-bottom: 30px;
        }

        .form-control,
        .form-select {
            border-radius: 8px;
            padding: 10px 15px;
            border: 1px solid #e0e0e0;
        }

        .form-control:focus,
        .form-select:focus {
            border-color: var(--primary-color);
            box-shadow: 0 0 0 0.25rem rgba(67, 97, 238, 0.25);
        }

        .btn {
            border-radius: 8px;
            padding: 10px 20px;
            font-weight: 500;
            transition: all 0.3s ease;
        }

        .btn-primary {
            background-color: var(--primary-color);
            border-color: var(--primary-color);
        }

        .btn-primary:hover {
            background-color: var(--secondary-color);
            border-color: var(--secondary-color);
            transform: translateY(-2px);
        }

        .btn-success {
            background-color: var(--success-color);
            border-color: var(--success-color);
        }

        .btn-outline-primary {
            color: var(--primary-color);
            border-color: var(--primary-color);
        }

        .btn-outline-primary:hover {
            background-color: var(--primary-color);
            color: white;
        }

        .badge {
            padding: 6px 10px;
            border-radius: 20px;
            font-weight: 500;
        }

        .table-sm td,
        .table-sm th {
            padding: 10px 15px;
        }

        h2,
        h3,
        h4,
        h5 {
            color: var(--dark-color);
            font-weight: 700;
        }

        h2 {
            margin-bottom: 25px;
            display: flex;
            align-items: center;
            justify-content: center;
        }

        h2 i {
            margin-right: 15px;
            color: var(--primary-color);
        }

        h3 {
            margin: 30px 0 20px;
            padding-bottom: 10px;
            border-bottom: 2px solid #f0f0f0;
        }

        .summary-grid {
            display: grid;
            grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
            gap: 20px;
            margin-top: 20px;
        }

        @media (max-width: 768px) {
            .summary-grid {
                grid-template-columns: 1fr;
            }
        }

        /* Estilos para la tabla moderna */
        .table-borderless {
            border: none;
        }

        .table-borderless td,
        .table-borderless th {
            border: none;
        }

        .border-bottom {
            border-bottom: 1px solid #f0f0f0 !important;
        }

        /* Colores suaves para grupos */
        .bg-blue-soft {
            background-color: rgba(67, 97, 238, 0.1);
            transition: all 0.3s ease;
        }

        .bg-green-soft {
            background-color: rgba(56, 176, 0, 0.1);
            transition: all 0.3s ease;
        }

        .bg-purple-soft {
            background-color: rgba(103, 58, 183, 0.1);
            transition: all 0.3s ease;
        }

        .bg-orange-soft {
            background-color: rgba(247, 127, 0, 0.1);
            transition: all 0.3s ease;
        }

        .bg-pink-soft {
            background-color: rgba(233, 30, 99, 0.1);
            transition: all 0.3s ease;
        }

        /* Efecto hover para filas */
        .table-hover tbody tr:hover {
            background-color: rgba(67, 97, 238, 0.15) !important;
            transform: translateX(4px);
            box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
        }

        /* Efecto hover para grupos */
        .group-header:hover {
            background-color: rgba(67, 97, 238, 0.2) !important;
        }

        /* Estilo para botones de acción */
        .btn-group-sm .btn {
            padding: 0.25rem 0.5rem;
            font-size: 0.875rem;
            border-radius: 0.375rem;
        }

        /* Mejora para el encabezado de la tabla */
        .bg-primary {
            background-color: var(--primary-color) !important;
        }

        .group-icon {
            transition: transform 0.2s ease;
            font-size: 0.8rem;
        }

        .group-header .fa-chevron-down {
            transform: rotate(90deg);
        }

        .table-hover tbody tr:hover {
            background-color: rgba(0, 0, 0, 0.03) !important;
        }
    </style>
    <?php include('header.php'); ?>
</head>

<body>
    <div class="container custom_container">
        <h2><i class="fas fa-money-bill-wave"></i>Gestión de Gastos</h2>

        <div class="row mb-4">
            <div class="col-md-4">
                <div class="stat-card">
                    <h5><i class="fas fa-chart-line"></i>Total Gastos</h5>
                    <p>$<?= number_format($resumen_general['total_monto'], 2) ?> USD</p>
                    <small>Total acumulado</small>
                </div>
            </div>
            <div class="col-md-4">
                <div class="stat-card">
                    <h5><i class="fas fa-exchange-alt"></i>Tasa de Cambio</h5>
                    <p><?= number_format($tasa_dolar, 2) ?> Bs/USD</p>
                    <small>Valor actual</small>
                </div>
            </div>
            <div class="col-md-4">
                <div class="stat-card">
                    <h5><i class="fas fa-list-ol"></i>Transacciones</h5>
                    <p><?= $resumen_general['total_registros'] ?></p>
                    <small>Total registros</small>
                </div>
            </div>
        </div>

        <div class="filter-container">
            <h4><i class="fas fa-filter"></i> Filtros</h4>
            <form method="GET" action="gastos2.php" class="row g-3 align-items-end">
                <div class="col-md-12">
                    <label class="form-label">Rango de Fechas:</label>
                    <div class="btn-group" role="group">
                        <a href="gastos2.php?date_filter=diario" class="btn btn-outline-primary filter-btn">
                            <i class="fas fa-calendar-day"></i> Diario
                        </a>
                        <a href="gastos2.php?date_filter=semanal" class="btn btn-outline-primary filter-btn">
                            <i class="fas fa-calendar-week"></i> Semanal
                        </a>
                        <a href="gastos2.php?date_filter=mensual" class="btn btn-outline-primary filter-btn">
                            <i class="fas fa-calendar-alt"></i> Mensual
                        </a>
                        <a href="gastos2.php?date_filter=mensual_anterior" class="btn btn-outline-primary filter-btn">
                            <i class="fas fa-calendar-minus"></i> Mes pasado
                        </a>
                    </div>
                </div>

                <div class="col-md-3">
                    <label for="date_from" class="form-label">Desde</label>
                    <input type="date" id="date_from" name="date_from" class="form-control" placeholder="Desde">
                </div>
                <div class="col-md-3">
                    <label for="date_to" class="form-label">Hasta</label>
                    <input type="date" id="date_to" name="date_to" class="form-control" placeholder="Hasta">
                </div>

                <div class="col-md-2">
                    <label for="client_gasto" class="form-label">Cliente</label>
                    <input type="text" name="client_gasto" class="form-control" placeholder="Cliente">
                </div>

                <div class="col-md-2">
                    <label for="group_filter" class="form-label">Grupo</label>
                    <input type="text" name="group_filter" class="form-control" placeholder="Grupo"
                        value="<?= htmlspecialchars($group_filter) ?>">
                </div>

                <div class="col-md-2">
                    <label for="intermediary_filter" class="form-label">Intermediario</label>
                    <input type="text" name="intermediary_filter" class="form-control" placeholder="Intermediario"
                        value="<?= htmlspecialchars($intermediary_filter) ?>">
                </div>

                <div class="col-md-2">
                    <label for="bank_gasto" class="form-label">Banco</label>
                    <input type="text" name="bank_gasto" class="form-control" placeholder="Banco">
                </div>

                <div class="col-md-2">
                    <button type="submit" class="btn btn-primary w-100">
                        <i class="fas fa-filter"></i> Aplicar
                    </button>
                </div>
            </form>
        </div>

        <div class="card">
            <div class="card-header">
                <i class="fas fa-plus-circle"></i> Agregar Nuevo Gasto
            </div>
            <div class="card-body">
                <form method="POST" action="insertar_gasto.php" class="row g-3">
                    <div class="col-md-3">
                        <label class="form-label">Banco</label>
                        <input type="text" name="banco" class="form-control" placeholder="Banco" required>
                    </div>
                    <div class="col-md-2">
                        <label class="form-label">Monto</label>
                        <input type="number" step="0.01" name="monto" class="form-control" placeholder="Monto" required>
                    </div>
                    <div class="col-md-3">
                        <label class="form-label">Descripción</label>
                        <input type="text" name="descripcion" class="form-control" placeholder="Descripción" required>
                    </div>
                    <div class="col-md-2">
                        <label class="form-label">Fecha</label>
                        <input type="date" name="fecha" class="form-control" required>
                    </div>
                    <div class="col-md-2">
                        <label class="form-label">Oficina Gestora</label>
                        <input type="text" name="cliente" class="form-control" placeholder="Oficina Gestora" required>
                    </div>
                    <div class="col-md-12 text-end">
                        <button type="submit" class="btn btn-success">
                            <i class="fas fa-save"></i> Guardar Gasto
                        </button>
                    </div>
                </form>
            </div>
        </div>

        <h3><i class="fas fa-list"></i> Resultados de Gastos</h3>
        <?= $tabla_gastos ?>

        <div class="summary-section">
            <h4 class="text-center mb-4"><i class="fas fa-chart-pie"></i> Resúmenes Detallados</h4>

            <ul class="nav nav-tabs mb-4" id="summaryTabs" role="tablist">
                <li class="nav-item" role="presentation">
                    <button class="nav-link active" id="bank-tab" data-bs-toggle="tab" data-bs-target="#bank"
                        type="button" role="tab">
                        <i class="fas fa-university"></i> Por Banco
                    </button>
                </li>
                <li class="nav-item" role="presentation">
                    <button class="nav-link" id="bankbs-tab" data-bs-toggle="tab" data-bs-target="#bankbs" type="button"
                        role="tab">
                        <i class="fas fa-money-bill-wave"></i> Por Banco (Bs)
                    </button>
                </li>
                <li class="nav-item" role="presentation">
                    <button class="nav-link" id="client-tab" data-bs-toggle="tab" data-bs-target="#client" type="button"
                        role="tab">
                        <i class="fas fa-users"></i> Por Cliente
                    </button>
                </li>
                <li class="nav-item" role="presentation">
                    <button class="nav-link" id="group-tab" data-bs-toggle="tab" data-bs-target="#group" type="button"
                        role="tab">
                        <i class="fas fa-layer-group"></i> Por Grupo
                    </button>
                </li>
                <li class="nav-item" role="presentation">
                    <button class="nav-link" id="intermediary-tab" data-bs-toggle="tab" data-bs-target="#intermediary"
                        type="button" role="tab">
                        <i class="fas fa-user-tie"></i> Por Intermediario
                    </button>
                </li>
            </ul>

            <div class="tab-content" id="summaryTabsContent">
                <div class="tab-pane fade show active" id="bank" role="tabpanel">
                    <?= $resumen_por_banco ?>
                </div>
                <div class="tab-pane fade" id="bankbs" role="tabpanel">
                    <?= $resumen_por_bancobs ?>
                </div>
                <div class="tab-pane fade" id="client" role="tabpanel">
                    <?= $resumen_por_cliente ?>
                </div>
                <div class="tab-pane fade" id="group" role="tabpanel">
                    <?= $resumen_por_grupo ?>
                </div>
                <div class="tab-pane fade" id="intermediary" role="tabpanel">
                    <?= $resumen_por_intermediario ?>
                </div>
            </div>
        </div>
    </div>
    <script>
        document.addEventListener('DOMContentLoaded', function () {
            let currentOpenGroup = null;

            // Inicializar la tabla
            function initializeTable() {
                // Ocultar solo las filas de datos (no los headers)
                document.querySelectorAll("tr[class^='group-']:not(.group-header)").forEach(row => {
                    row.style.display = 'none';
                });

                // Agregar event listeners a los headers
                document.querySelectorAll('tr.group-header').forEach(header => {
                    const group = header.getAttribute('data-group');

                    header.addEventListener('click', function () {
                        toggleGroup(group);
                    });
                });
            }

            // Función para alternar grupos
            function toggleGroup(group) {
                const groupRows = document.querySelectorAll('tr.group-' + CSS.escape(group));
                const groupHeader = document.querySelector(`tr.group-header[data-group="${CSS.escape(group)}"]`);
                const groupIcon = groupHeader.querySelector('.group-icon');

                // Cerrar el grupo actualmente abierto (si hay uno y es diferente)
                if (currentOpenGroup && currentOpenGroup !== group) {
                    const currentRows = document.querySelectorAll('tr.group-' + CSS.escape(currentOpenGroup));
                    const currentHeader = document.querySelector(`tr.group-header[data-group="${CSS.escape(currentOpenGroup)}"]`);
                    const currentIcon = currentHeader.querySelector('.group-icon');

                    currentRows.forEach(row => {
                        row.style.display = 'none';
                    });

                    if (currentIcon) {
                        currentIcon.classList.remove('fa-chevron-down');
                        currentIcon.classList.add('fa-chevron-right');
                    }
                }

                // Alternar el grupo seleccionado
                if (groupRows.length > 0) {
                    if (groupRows[0].style.display === 'none') {
                        // Abrir grupo
                        groupRows.forEach(row => {
                            row.style.display = 'table-row';
                        });
                        if (groupIcon) {
                            groupIcon.classList.remove('fa-chevron-right');
                            groupIcon.classList.add('fa-chevron-down');
                        }
                        currentOpenGroup = group;
                    } else {
                        // Cerrar grupo
                        groupRows.forEach(row => {
                            row.style.display = 'none';
                        });
                        if (groupIcon) {
                            groupIcon.classList.remove('fa-chevron-down');
                            groupIcon.classList.add('fa-chevron-right');
                        }
                        currentOpenGroup = null;
                    }
                }
            }

            // Inicializar la tabla
            initializeTable();

            // Función para limpiar filtros de fecha
            function clearCustomDates() {
                document.getElementById('date_from').value = '';
                document.getElementById('date_to').value = '';
            }

            // Configurar event listeners para los botones de filtro
            document.querySelectorAll('.filter-btn').forEach(button => {
                button.addEventListener('click', clearCustomDates);
            });
        });
    </script>
</body>

</html>