<?php
// --- INICIO DE LOGGING ---
 $logFile = __DIR__ . '/resumen_ventas_debug.log';
file_put_contents($logFile, "=== NUEVA PETICIÓN A " . date('Y-m-d H:i:s') . " ===\n");
function logMessage($message) {
    global $logFile;
    file_put_contents($logFile, date('Y-m-d H:i:s') . " - " . $message . "\n", FILE_APPEND);
}

// ? 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) {
    logMessage("ERROR: JSON inválido o vacío.");
    echo json_encode(['success'=>false,'message'=>'JSON inválido']);
    exit;
}

// --- VALIDACIÓN DE PARÁMETROS ---
 $slug_tienda = isset($input['slug_tienda']) ? trim($input['slug_tienda']) : '';
 $fecha_inicio = isset($input['fechaInicio']) ? trim($input['fechaInicio']) : null;
 $fecha_fin = isset($input['fechaFin']) ? trim($input['fechaFin']) : null;
 $estado_factura = isset($input['estado']) ? trim($input['estado']) : '';

logMessage("Parámetros recibidos: slug_tienda=$slug_tienda, fecha_inicio=$fecha_inicio, fecha_fin=$fecha_fin, estado=$estado_factura");

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

try {
    // --- 1. RESUMEN DE VENTAS (FILTRADO POR ESTADO Y SIN CIERRE_ID) ---
    $sql_ventas = "
        SELECT 
            COALESCE(SUM(subtotal), 0) AS subtotal_ventas,
            COALESCE(SUM(iva), 0) AS total_iva,
            COALESCE(SUM(domicilio), 0) AS total_domicilio,
            COALESCE(SUM(propina), 0) AS total_propina,
            COALESCE(SUM(total), 0) AS gran_total,
            COUNT(id) AS total_facturas
        FROM facturas 
        WHERE slug_tienda = ?
        AND (cierre_id IS NULL OR cierre_id = 0)
    ";
    $params_ventas = [$slug_tienda];
    $types_ventas = 's';

    if (!empty($estado_factura)) {
        $sql_ventas .= " AND estado = ?";
        $params_ventas[] = $estado_factura;
        $types_ventas .= 's';
    }
    
    if (!empty($fecha_inicio)) {
        $sql_ventas .= " AND DATE(fecha) >= ?";
        $params_ventas[] = $fecha_inicio;
        $types_ventas .= 's';
    }
    if (!empty($fecha_fin)) {
        $sql_ventas .= " AND DATE(fecha) <= ?";
        $params_ventas[] = $fecha_fin;
        $types_ventas .= 's';
    }

    $stmt = $mysqli->prepare($sql_ventas);
    $stmt->bind_param($types_ventas, ...$params_ventas);
    $stmt->execute();
    $resumen_ventas = $stmt->get_result()->fetch_assoc();
    $stmt->close();

    // --- 2. RESUMEN DE NOTAS DE CRÉDITO (SIN CIERRE_ID) ---
    $sql_notas = "
        SELECT 
            estado,
            COUNT(id) AS total_notas,
            COALESCE(SUM(total), 0) AS gran_total
        FROM notas_credito 
        WHERE slug_tienda = ?
        AND (cierre_id IS NULL OR cierre_id = 0)
    ";
    $params_notas = [$slug_tienda];
    $types_notas = 's';

    if (!empty($fecha_inicio)) {
        $sql_notas .= " AND DATE(fecha) >= ?";
        $params_notas[] = $fecha_inicio;
        $types_notas .= 's';
    }
    if (!empty($fecha_fin)) {
        $sql_notas .= " AND DATE(fecha) <= ?";
        $params_notas[] = $fecha_fin;
        $types_notas .= 's';
    }
    $sql_notas .= " GROUP BY estado";

    $stmt = $mysqli->prepare($sql_notas);
    $stmt->bind_param($types_notas, ...$params_notas);
    $stmt->execute();
    $rows_notas = $stmt->get_result()->fetch_all(MYSQLI_ASSOC);
    $stmt->close();
    
    $resumen_notas_por_estado = [
        'emitida' => ['total_notas' => 0, 'gran_total' => 0],
        'aplicada' => ['total_notas' => 0, 'gran_total' => 0],
        'reversada' => ['total_notas' => 0, 'gran_total' => 0],
    ];
    foreach ($rows_notas as $row) {
        if (isset($resumen_notas_por_estado[$row['estado']])) {
            $resumen_notas_por_estado[$row['estado']] = [
                'total_notas' => (int)$row['total_notas'],
                'gran_total' => (float)$row['gran_total']
            ];
        }
    }

    // --- 3. RESUMEN DE CRÉDITOS Y ABONOS (SIN CIERRE_ID) ---
    $sql_creditos = "
        SELECT 
            COALESCE(SUM(total), 0) AS total_credito_ventas
        FROM facturas 
        WHERE slug_tienda = ? AND estado = 'credito'
        AND (cierre_id IS NULL OR cierre_id = 0)
    ";
    $params_creditos = [$slug_tienda];
    $types_creditos = 's';
    if (!empty($fecha_inicio)) {
        $sql_creditos .= " AND DATE(fecha) >= ?";
        $params_creditos[] = $fecha_inicio;
        $types_creditos .= 's';
    }
    if (!empty($fecha_fin)) {
        $sql_creditos .= " AND DATE(fecha) <= ?";
        $params_creditos[] = $fecha_fin;
        $types_creditos .= 's';
    }
    $stmt = $mysqli->prepare($sql_creditos);
    $stmt->bind_param($types_creditos, ...$params_creditos);
    $stmt->execute();
    $total_credito_ventas = (float) $stmt->get_result()->fetch_assoc()['total_credito_ventas'];
    $stmt->close();

    $sql_abonos = "
        SELECT COALESCE(SUM(ac.monto_abono), 0) AS total_abonos_recibidos
        FROM abonos_creditos ac
        WHERE ac.slug_tienda = ?
        AND (ac.cierre_id IS NULL OR ac.cierre_id = 0)
    ";
    $params_abonos = [$slug_tienda];
    $types_abonos = 's';
    if (!empty($fecha_inicio)) {
        $sql_abonos .= " AND DATE(ac.fecha_abono) >= ?";
        $params_abonos[] = $fecha_inicio;
        $types_abonos .= 's';
    }
    if (!empty($fecha_fin)) {
        $sql_abonos .= " AND DATE(ac.fecha_abono) <= ?";
        $params_abonos[] = $fecha_fin;
        $types_abonos .= 's';
    }
    $stmt = $mysqli->prepare($sql_abonos);
    $stmt->bind_param($types_abonos, ...$params_abonos);
    $stmt->execute();
    $total_abonos_recibidos = (float) $stmt->get_result()->fetch_assoc()['total_abonos_recibidos'];
    $stmt->close();
    
    $saldo_pendiente_cobro = $total_credito_ventas - $total_abonos_recibidos;
    
    $resumen_creditos = [
        'total_credito_ventas' => $total_credito_ventas,
        'total_abonos_recibidos' => $total_abonos_recibidos,
        'saldo_pendiente_cobro' => $saldo_pendiente_cobro,
    ];

    // --- 4. RESUMEN DE VENTAS POR MÉTODO DE PAGO ---
    $sql_metodos_pago = "
        SELECT 
            fp.medio_pago,
            COALESCE(SUM(fp.monto), 0) AS total_monto
        FROM factura_pagos fp
        JOIN facturas f ON fp.factura_id = f.id
        WHERE f.slug_tienda = ?
        AND (fp.cierre_id IS NULL OR fp.cierre_id = 0)
    ";
    $params_metodos = [$slug_tienda];
    $types_metodos = 's';

    if (!empty($estado_factura)) {
        $sql_metodos_pago .= " AND f.estado = ?";
        $params_metodos[] = $estado_factura;
        $types_metodos .= 's';
    }
    if (!empty($fecha_inicio)) {
        $sql_metodos_pago .= " AND DATE(f.fecha) >= ?";
        $params_metodos[] = $fecha_inicio;
        $types_metodos .= 's';
    }
    if (!empty($fecha_fin)) {
        $sql_metodos_pago .= " AND DATE(f.fecha) <= ?";
        $params_metodos[] = $fecha_fin;
        $types_metodos .= 's';
    }
    $sql_metodos_pago .= " GROUP BY fp.medio_pago";

    $stmt = $mysqli->prepare($sql_metodos_pago);
    $stmt->bind_param($types_metodos, ...$params_metodos);
    $stmt->execute();
    $rows_metodos = $stmt->get_result()->fetch_all(MYSQLI_ASSOC);
    $stmt->close();

    $resumen_metodos_pago = [];
    foreach ($rows_metodos as $row) {
        $resumen_metodos_pago[$row['medio_pago']] = (float)$row['total_monto'];
    }

    // --- NUEVO: 5. RESUMEN DE ABONOS POR MÉTODO DE PAGO ---
    $sql_abonos_metodo = "
        SELECT 
            ac.metodo_abono,
            COALESCE(SUM(ac.monto_abono), 0) AS total_monto
        FROM abonos_creditos ac
        WHERE ac.slug_tienda = ?
        AND (ac.cierre_id IS NULL OR ac.cierre_id = 0)
    ";
    $params_abonos_metodo = [$slug_tienda];
    $types_abonos_metodo = 's';

    if (!empty($fecha_inicio)) {
        $sql_abonos_metodo .= " AND DATE(ac.fecha_abono) >= ?";
        $params_abonos_metodo[] = $fecha_inicio;
        $types_abonos_metodo .= 's';
    }
    if (!empty($fecha_fin)) {
        $sql_abonos_metodo .= " AND DATE(ac.fecha_abono) <= ?";
        $params_abonos_metodo[] = $fecha_fin;
        $types_abonos_metodo .= 's';
    }
    $sql_abonos_metodo .= " GROUP BY ac.metodo_abono";

    $stmt = $mysqli->prepare($sql_abonos_metodo);
    $stmt->bind_param($types_abonos_metodo, ...$params_abonos_metodo);
    $stmt->execute();
    $rows_abonos_metodo = $stmt->get_result()->fetch_all(MYSQLI_ASSOC);
    $stmt->close();

    $resumen_abonos_por_metodo = [];
    foreach ($rows_abonos_metodo as $row) {
        $resumen_abonos_por_metodo[$row['metodo_abono']] = (float)$row['total_monto'];
    }
    
    logMessage("ÉXITO: Resumen generado correctamente.");

    // --- RESPUESTA FINAL ---
    echo json_encode([
        'success' => true, 
        'resumen' => [
            'resumen_ventas' => $resumen_ventas,
            'resumen_notas_credito' => $resumen_notas_por_estado,
            'resumen_creditos' => $resumen_creditos,
            'resumen_metodos_pago' => $resumen_metodos_pago,
            'resumen_abonos_por_metodo' => $resumen_abonos_por_metodo, // <-- NUEVO
        ]
    ]);

} catch (Exception $e) {
    logMessage("EXCEPCIÓN CAPTURADA: " . $e->getMessage());
    http_response_code(500);
    echo json_encode(['success' => false, 'message' => $e->getMessage()]);
} finally {
    if (isset($mysqli) && $mysqli) { $mysqli->close(); }
    logMessage("--- FIN DEL SCRIPT ---\n");
}
?>