using Brizco.Domain.Entities.Users;

namespace Brizco.Core.EntityServices.Abstracts;

public interface IUserService : IScopedDependency
{
    Task<ProfileResponseDto> GetUserProfileAsync(CancellationToken cancellationToken);
    Task<AccessToken<ApplicationUserSDto, ComplexUserRoleSDto>> ChangeUserRoleAsync(Guid roleId,CancellationToken cancellationToken);
    Task<List<ComplexUserRoleSDto>> GetUserRolesAsync(CancellationToken cancellationToken);
    Task<List<ComplexUserRoleSDto>> GetUserRolesAsync(Guid userId, CancellationToken cancellationToken);
    Task<List<ComplexUserSDto>> GetUsersAsync(int page = 0, CancellationToken cancellationToken = default);
    Task<ApplicationUserSDto> GetUserAsync(Guid userId);
    Task<ApplicationUser> CreateUserAsync(string phoneNumber);
    Task<ApplicationUser> CreateUserAsync(UserActionRequestDto request, CancellationToken cancellationToken);
    Task<bool> EditUserAsync(UserActionRequestDto request, CancellationToken cancellationToken);
    Task<bool> EditUserProfileAsync(UserActionRequestDto request, CancellationToken cancellationToken);
    Task<bool> RemoveUserAsync(Guid userId, CancellationToken cancellationToken);
    Task<bool> RemoveUserFromComplexAsync(Guid userId, CancellationToken cancellationToken);


    Task<List<ApplicationRole>> GetRolesAsync(int page = 0, CancellationToken cancellationToken = default);
    Task<RoleActionRequestDto> GetRoleAsync(Guid roleId);
    Task<ApplicationRole> CreateRoleAsync(RoleActionRequestDto request);
    Task<bool> EditRoleAsync(RoleActionRequestDto request);
    Task<bool> RemoveRoleAsync(Guid roleId);
    List<ClaimDto> GetPermissions();
}