using DigitalData.UserManager.Application.DTOs.User;
using DigitalData.UserManager.Domain.Entities;
using DigitalData.Core.DTO;

namespace DigitalData.UserManager.Application.Contracts
{
    public interface IUserService : IBaseService<UserCreateDto, UserReadDto, UserUpdateDto, User>
    {
        Task<DataResult<IEnumerable<UserReadDto>>> ReadByModuleIdAsync(int moduleId);

        Task<DataResult<IEnumerable<UserReadDto>>> ReadUnassignedByModuleIdAsync(int moduleId);

        Task<DataResult<IEnumerable<UserReadDto>>> ReadByGroupIdAsync(int groupId);

        Task<DataResult<IEnumerable<UserReadDto>>> ReadUnassignedByGroupIdAsync(int groupId);

        Task<DataResult<int>> CreateAsync(UserPrincipalDto upDto);

        Task<DataResult<UserReadDto>> ReadByUsernameAsync(string username);
    }
}