using Knot.Contracts.Profiles.Application.DTOs;
using Knot.Shared.Kernel;

namespace Knot.Contracts.Profiles.Domain;

public interface IProfileRepository
{
    Task<UserProfileDto?> GetAsync(Guid userId, CancellationToken cancellationToken = default);
    Task<UserProfileDto?> GetByUsernameAsync(string username, CancellationToken cancellationToken = default);
    Task<List<UserProfileDto>> GetAsync(IEnumerable<Guid> userIds, CancellationToken cancellationToken = default);
    Task<List<UserProfileDto>> SearchAsync(string query, int limit = 20, CancellationToken cancellationToken = default);
    Task<Result<UserProfileDto>> CreateAsync(UserProfileDto dto, CancellationToken cancellationToken = default);
    Task<Result<UserProfileDto>> UpdateAsync(UserProfileDto dto, CancellationToken cancellationToken = default);
    Task<Result> DeleteAsync(Guid userId, CancellationToken cancellationToken = default);
    Task<Result> UpdateStatusAsync(Guid userId, bool isBanned, bool isDeleted, CancellationToken ct = default);
}
