<?php
// ? Errores (quitar en produccion)
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

// ? CORS y Headers
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Headers: Content-Type");
header("Access-Control-Allow-Methods: POST, OPTIONS");
header("Content-Type: application/json; charset=utf-8");

if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { http_response_code(200); exit; }

// ? Conexion
require_once(__DIR__ . '/../../config.php');
 $mysqli->set_charset("utf8mb4");

// ? JSON
 $input = json_decode(file_get_contents('php://input'), true);
if (!$input) {
    echo json_encode(['success'=>false,'message'=>'JSON inválido']);
    exit;
}

// --- VALIDACION DE PARAMETROS ---
 $slug_tienda = isset($input['slug_tienda']) ? trim($input['slug_tienda']) : '';
 $apertura_id = isset($input['apertura_id']) ? intval($input['apertura_id']) : 0; // <-- NUEVO PARÁMETRO CLAVE
 $fecha_inicio = isset($input['fechaInicio']) ? trim($input['fechaInicio']) : null;
 $fecha_fin = isset($input['fechaFin']) ? trim($input['fechaFin']) : null;

if (!$slug_tienda) {
    echo json_encode(['success' => false, 'message' => 'El slug de la tienda es requerido.']);
    exit;
}

try {
    // --- CONSTRUCCIÓN DE LA CONSULTA CON JOIN ---
    $sql = "
        SELECT 
            g.id, 
            g.descripcion, 
            g.monto, 
            g.cajero, 
            g.fecha_gasto,
            cc.turno,
            cc.fecha_apertura
        FROM gastos g
        LEFT JOIN cierres_de_caja cc ON g.apertura_id = cc.id
        WHERE g.slug_tienda = ?
    ";
    $params = [$slug_tienda];
    $types = 's';

    // --- LÓGICA DE FILTRADO CONDICIONAL (ADAPTADA) ---
    if ($apertura_id > 0) {
        // Si se proporciona un ID de apertura, filtramos por él y ignoramos las fechas.
        $sql .= " AND g.apertura_id = ?";
        $params[] = $apertura_id;
        $types .= 'i'; // 'i' para integer
    } else {
        // Si NO se proporciona ID, usamos el filtro de fechas original.
        if (!empty($fecha_inicio)) {
            $sql .= " AND g.fecha_gasto >= ?";
            $params[] = $fecha_inicio;
            $types .= 's';
        }

        if (!empty($fecha_fin)) {
            $sql .= " AND g.fecha_gasto <= ?";
            $params[] = $fecha_fin . ' 23:59:59';
            $types .= 's';
        }
    }

    $sql .= " ORDER BY g.fecha_gasto DESC";

    // --- EJECUCIÓN Y RESPUESTA ---
    $stmt = $mysqli->prepare($sql);
    
    if (!$stmt) {
        throw new Exception("Error al preparar la consulta de gastos: " . $mysqli->error);
    }
    
    // Usamos el operador "..." para desempaquetar el array de parámetros
    $stmt->bind_param($types, ...$params);
    
    if (!$stmt->execute()) {
        throw new Exception("Error al ejecutar la consulta de gastos: " . $stmt->error);
    }
    
    $result = $stmt->get_result();
    $gastos = $result->fetch_all(MYSQLI_ASSOC);
    $stmt->close();
    
    echo json_encode([
        'success' => true, 
        'gastos' => $gastos
    ]);

} catch (Exception $e) {
    http_response_code(500);
    echo json_encode(['success' => false, 'message' => $e->getMessage()]);
} finally {
    if (isset($mysqli) && $mysqli) { $mysqli->close(); }
}
?>