using Modules.User.Application.Models;

namespace Modules.User.Application.Gateways;

public interface IUserQueries
{
    public Task<Models.Account?> TryGetAccountAsync(string email, CancellationToken cancellationToken);
    public Task<Models.Account> GetAccountAsync(string email, CancellationToken cancellationToken);
    public Task<Models.UserDetail?> GetUserAsync(Guid accountId, Guid? sessionId, CancellationToken cancellationToken);
    public Task<Models.UserDetail?> GetUserDetailAsync(Guid accountId, CancellationToken cancellationToken);
    public Task<Models.UserProfile?> GetUserProfileAsync(Guid userId, CancellationToken cancellationToken);
    public Task<List<Session>> GetAccountSessionsAsync(Guid accountId, CancellationToken cancellationToken);
    public Task<Session?> TryGetSessionAsync(string refreshToken, CancellationToken cancellationToken);
    public Task<string?> GetAvatarIdAsync(Guid userId, CancellationToken cancellationToken);
    
    public Task<PagedData<UserInfoShort>> GetUsersAsync(UserListFilter? userListFilter, CancellationToken cancellationToken);
}