using Netina.Common.Models;
using Netina.Domain.Dtos.RequestDtos;
using Netina.Domain.Dtos.ResponseDtos;
using Netina.Domain.Dtos.SmallDtos;
using Netina.Domain.Entities.Users;
using Netina.Domain.Models.Claims;

namespace Netina.Core.EntityServices.Abstracts;

public interface IUserService : IScopedDependency
{
    Task<ProfileResponseDto> GetUserProfileAsync(CancellationToken cancellationToken);
    Task<List<ApplicationUserSDto>> GetUsersAsync(int page = 0,string? phoneNumber = null, CancellationToken cancellationToken = default);
    Task<ApplicationUserSDto> GetUserAsync(Guid userId, CancellationToken cancellationToken = default);
    Task<ApplicationUser> CreateUserAsync(string phoneNumber, CancellationToken cancellationToken = default);
    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<AdminChangeLogResponseDto> GetAdminChangeLogAsync(CancellationToken cancellationToken = default);


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