<?php
require_once __DIR__ . '/../../config/database.php';
require_once __DIR__ . '/../../includes/helpers.php';

$pdo = getConnection();

try {
    $where = [];
    $params = [];

    if (!empty($_GET['categoria_id'])) {
        $where[] = "g.categoria_id = ?";
        $params[] = (int)$_GET['categoria_id'];
    }
    if (!empty($_GET['fecha_desde'])) {
        $where[] = "g.fecha_gasto >= ?";
        $params[] = $_GET['fecha_desde'];
    }
    if (!empty($_GET['fecha_hasta'])) {
        $where[] = "g.fecha_gasto <= ?";
        $params[] = $_GET['fecha_hasta'];
    }
    if (!empty($_GET['forma_pago'])) {
        $where[] = "g.forma_pago = ?";
        $params[] = $_GET['forma_pago'];
    }
    if (!empty($_GET['sucursal_id'])) {
        $where[] = "g.sucursal_id = ?";
        $params[] = (int)$_GET['sucursal_id'];
    }
    if (!empty($_GET['search'])) {
        $where[] = "(g.descripcion LIKE ? OR g.proveedor_nombre LIKE ? OR g.referencia LIKE ?)";
        $s = '%' . $_GET['search'] . '%';
        $params[] = $s; $params[] = $s; $params[] = $s;
    }

    $whereClause = count($where) > 0 ? 'WHERE ' . implode(' AND ', $where) : '';

    $sql = "SELECT g.id, g.categoria_id, c.nombre as categoria_nombre, g.descripcion, g.monto, 
                   g.fecha_gasto, g.forma_pago, g.referencia, g.proveedor_nombre, g.notas, g.created_at
            FROM gastos_operativos g
            LEFT JOIN categorias_gastos c ON c.id = g.categoria_id
            $whereClause
            ORDER BY g.fecha_gasto DESC, g.id DESC";

    $stmt = $pdo->prepare($sql);
    $stmt->execute($params);
    $gastos = $stmt->fetchAll(PDO::FETCH_ASSOC);

    // Totals
    $sumSql = "SELECT COALESCE(SUM(g.monto), 0) as total
               FROM gastos_operativos g
               LEFT JOIN categorias_gastos c ON c.id = g.categoria_id
               $whereClause";
    $stmtSum = $pdo->prepare($sumSql);
    $stmtSum->execute($params);
    $total = (float)$stmtSum->fetchColumn();

    // Per-category totals
    $catSql = "SELECT g.categoria_id, c.nombre as categoria_nombre, SUM(g.monto) as total
               FROM gastos_operativos g
               LEFT JOIN categorias_gastos c ON c.id = g.categoria_id
               $whereClause
               GROUP BY g.categoria_id ORDER BY total DESC";
    $stmtCat = $pdo->prepare($catSql);
    $stmtCat->execute($params);
    $porCategoria = $stmtCat->fetchAll(PDO::FETCH_ASSOC);

    json_success([
        'gastos' => $gastos,
        'total' => $total,
        'por_categoria' => $porCategoria,
        'count' => count($gastos)
    ]);
} catch (Exception $e) {
    json_error("Error al listar gastos: " . $e->getMessage());
}
