using UniVerse.Application.DTOs.Achievements;
using UniVerse.Application.DTOs.Common;
using UniVerse.Application.DTOs.Gamification;
using UniVerse.Domain.Enums;

namespace UniVerse.Application.Interfaces;

public interface IGamificationService
{
    Task AwardCoinsAsync(int userId, int amount, CoinTransactionType type,
        int? reviewId = null, int? achievementId = null, string? description = null);
    Task CheckAndAwardAchievementsAsync(int userId);
    Task<int> CalculateLevelAsync(int xp);
    Task<LevelProgressDto> GetLevelProgressAsync(int xp);
    Task<List<UserAchievementDto>> GetUserAchievementsAsync(int userId);
    Task<PagedResult<CoinTransactionDto>> GetTransactionsAsync(int userId, PaginationRequest pagination);
}
