using GestionIntegral.Api.Models.Contables;
using System;
using System.Collections.Generic;
using System.Data;
using System.Threading.Tasks;

namespace GestionIntegral.Api.Data.Repositories.Contables
{
    public interface IPagoDistribuidorRepository
    {
        Task<IEnumerable<PagoDistribuidor>> GetAllAsync(
            DateTime? fechaDesde, DateTime? fechaHasta,
            int? idDistribuidor, int? idEmpresa, string? tipoMovimiento);

        Task<PagoDistribuidor?> GetByIdAsync(int idPago);
        Task<PagoDistribuidor?> CreateAsync(PagoDistribuidor nuevoPago, int idUsuario, IDbTransaction transaction);
        Task<bool> UpdateAsync(PagoDistribuidor pagoAActualizar, int idUsuario, IDbTransaction transaction);
        Task<bool> DeleteAsync(int idPago, int idUsuario, IDbTransaction transaction);
        Task<PagoDistribuidor?> GetByReciboAndTipoMovimientoAsync(int recibo, string tipoMovimiento, int? excludeIdPago = null);
        Task<IEnumerable<(PagoDistribuidorHistorico Historial, string NombreUsuarioModifico)>> GetHistorialAsync(
        DateTime? fechaDesde, DateTime? fechaHasta,
        int? idUsuarioModifico, string? tipoModificacion,
        int? idPagoOriginal); // Para filtrar por un pago específico
    }
}