using GestionIntegral.Api.Models.Impresion;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Data; // Para IDbTransaction

namespace GestionIntegral.Api.Data.Repositories.Impresion
{
    public interface ITipoBobinaRepository
    {
        Task<IEnumerable<TipoBobina>> GetAllAsync(string? denominacionFilter);
        Task<IEnumerable<TipoBobina>> GetAllDropdownAsync();
        Task<TipoBobina?> GetByIdAsync(int id);
        Task<TipoBobina?> CreateAsync(TipoBobina nuevoTipoBobina, int idUsuario, IDbTransaction transaction);
        Task<bool> UpdateAsync(TipoBobina tipoBobinaAActualizar, int idUsuario, IDbTransaction transaction);
        Task<bool> DeleteAsync(int id, int idUsuario, IDbTransaction transaction);
        Task<bool> ExistsByDenominacionAsync(string denominacion, int? excludeId = null);
        Task<bool> IsInUseAsync(int id); // Verificar si se usa en bob_StockBobinas
        Task<IEnumerable<(TipoBobinaHistorico Historial, string NombreUsuarioModifico)>> GetHistorialAsync(
            DateTime? fechaDesde, DateTime? fechaHasta,
            int? idUsuarioModifico, string? tipoModificacion,
            int? idTipoBobinaOriginal);
    }
}