using UniVerse.Application.DTOs.Common;
using UniVerse.Application.DTOs.Lectures;
using UniVerse.Application.DTOs.Users;
using UniVerse.Domain.Enums;

namespace UniVerse.Application.Interfaces;

public interface IUserService
{
    Task<UserDto> GetByIdAsync(int id);
    Task<UserDto> UpdateProfileAsync(int id, UpdateUserRequest request);
    Task<UserStatsDto> GetStatsAsync(int id);
    Task<AdminDashboardStatsDto> GetAdminDashboardStatsAsync();
    Task<PagedResult<LectureDto>> GetEnrollmentsAsync(int id, PaginationRequest pagination);
    Task<string> GetMyEnrollmentsIcsAsync(int userId);
    Task<string> GetEnrollmentIcsAsync(int userId, int lectureId);
    Task<string> GetCalendarSubscriptionTokenAsync(int userId);
    Task<string> GetEnrollmentsIcsBySubscriptionTokenAsync(string token);
    Task<PagedResult<UserDto>> GetAllAsync(UserFilterRequest filter);
    Task SetRolesAsync(int id, IReadOnlyCollection<UserRole> roles);
    Task SetActiveAsync(int id, bool isActive);
}
