using GestionIntegral.Api.Dtos.Auditoria;
using GestionIntegral.Api.Dtos.Usuarios;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace GestionIntegral.Api.Services.Usuarios
{
    public interface IPerfilService
    {
        Task<IEnumerable<PerfilDto>> ObtenerTodosAsync(string? nombreFilter);
        Task<PerfilDto?> ObtenerPorIdAsync(int id);
        Task<(PerfilDto? Perfil, string? Error)> CrearAsync(CreatePerfilDto createDto, int idUsuario);
        Task<(bool Exito, string? Error)> ActualizarAsync(int id, UpdatePerfilDto updateDto, int idUsuario);
        Task<(bool Exito, string? Error)> EliminarAsync(int id, int idUsuario);
        Task<IEnumerable<PermisoAsignadoDto>> ObtenerPermisosAsignadosAsync(int idPerfil);
        Task<(bool Exito, string? Error)> ActualizarPermisosAsignadosAsync(int idPerfil, ActualizarPermisosPerfilRequestDto request, int idUsuarioModificador);
        Task<IEnumerable<PerfilHistorialDto>> ObtenerHistorialAsync(
        DateTime? fechaDesde, DateTime? fechaHasta,
        int? idUsuarioModifico, string? tipoModificacion,
        int? idPerfilAfectado);
        Task<IEnumerable<PermisosPerfilesHistorialDto>> ObtenerPermisosAsignadosHistorialAsync(
        DateTime? fechaDesde, DateTime? fechaHasta,
        int? idUsuarioModifico, string? tipoModificacion,
        int? idPerfilAfectado, int? idPermisoAfectado);
    }
}