using GestionIntegral.Api.Models.Contables; // Para TipoPago y TipoPagoHistorico
using System.Collections.Generic;
using System.Threading.Tasks;

namespace GestionIntegral.Api.Data.Repositories.Contables
{
    public interface ITipoPagoRepository
    {
        Task<IEnumerable<TipoPago>> GetAllAsync(string? nombreFilter);
        Task<TipoPago?> GetByIdAsync(int id);
        Task<TipoPago?> CreateAsync(TipoPago nuevoTipoPago, int idUsuario); // Devuelve el objeto creado o null si falla
        Task<bool> UpdateAsync(TipoPago tipoPagoAActualizar, int idUsuario);
        Task<bool> DeleteAsync(int id, int idUsuario); // Devuelve true si fue exitoso
        Task<bool> ExistsByNameAsync(string nombre, int? excludeId = null);
        Task<bool> IsInUseAsync(int id);
        Task<IEnumerable<(TipoPagoHistorico Historial, string NombreUsuarioModifico)>> GetHistorialAsync(
        DateTime? fechaDesde, DateTime? fechaHasta,
        int? idUsuarioModifico, string? tipoModificacion,
        int? idTipoPagoOriginal);
    }
}