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

namespace GestionIntegral.Api.Data.Repositories.Usuarios
{
    public interface IPermisoRepository
    {
        Task<IEnumerable<Permiso>> GetAllAsync(string? moduloFilter, string? codAccFilter);
        Task<Permiso?> GetByIdAsync(int id);
        Task<Permiso?> CreateAsync(Permiso nuevoPermiso, int idUsuario, IDbTransaction transaction);
        Task<bool> UpdateAsync(Permiso permisoAActualizar, int idUsuario, IDbTransaction transaction);
        Task<bool> DeleteAsync(int id, int idUsuario, IDbTransaction transaction);
        Task<bool> ExistsByCodAccAsync(string codAcc, int? excludeId = null);
        Task<bool> IsInUseAsync(int id);
        Task<IEnumerable<Permiso>> GetPermisosByIdsAsync(IEnumerable<int> ids);
        Task<IEnumerable<(PermisoHistorico Historial, string NombreUsuarioModifico)>> GetHistorialAsync(
        DateTime? fechaDesde, DateTime? fechaHasta,
        int? idUsuarioModifico, string? tipoModificacion,
        int? idPermisoOriginal);
    }
}