namespace Tiku.Application.Learning;

public interface ILearningActivityService
{
    Task<LearningStatsItem> GetStatsAsync(
        LearningActor actor,
        CancellationToken cancellationToken = default);

    Task<LearningList<LearningTrendItem>> GetTrendAsync(
        LearningActor actor,
        LearningLimitFilter filter,
        CancellationToken cancellationToken = default);

    Task<LearningLeaderboardResult> GetLeaderboardAsync(
        LearningActor actor,
        LearningLimitFilter filter,
        CancellationToken cancellationToken = default);

    Task<AnswerRecordItem> SubmitAnswerAsync(
        LearningActor actor,
        SubmitAnswerCommand command,
        CancellationToken cancellationToken = default);

    Task<LearningList<FavoriteQuestionItem>> GetFavoriteQuestionsAsync(
        LearningActor actor,
        LearningLimitFilter filter,
        CancellationToken cancellationToken = default);

    Task<LearningActionResult> ToggleFavoriteQuestionAsync(
        LearningActor actor,
        QuestionActionCommand command,
        CancellationToken cancellationToken = default);

    Task<LearningList<WrongQuestionItem>> GetWrongQuestionsAsync(
        LearningActor actor,
        LearningLimitFilter filter,
        CancellationToken cancellationToken = default);

    Task<WrongQuestionReviewPlan> GetWrongQuestionReviewPlanAsync(
        LearningActor actor,
        LearningLimitFilter filter,
        CancellationToken cancellationToken = default);

    Task<LearningActionResult> ResolveWrongQuestionAsync(
        LearningActor actor,
        QuestionActionCommand command,
        CancellationToken cancellationToken = default);

    Task<LearningList<WordProgressItem>> GetWordProgressAsync(
        LearningActor actor,
        LearningLimitFilter filter,
        CancellationToken cancellationToken = default);

    Task<WordReviewPlan> GetWordReviewPlanAsync(
        LearningActor actor,
        LearningLimitFilter filter,
        CancellationToken cancellationToken = default);

    Task<WordProgressItem> UpdateWordProgressAsync(
        LearningActor actor,
        WordProgressCommand command,
        CancellationToken cancellationToken = default);

    Task<WordProgressItem> ReviewWordAsync(
        LearningActor actor,
        WordReviewCommand command,
        CancellationToken cancellationToken = default);

    Task<WordStatsItem> GetWordStatsAsync(
        LearningActor actor,
        LearningLimitFilter filter,
        CancellationToken cancellationToken = default);

    Task<LearningList<FavoriteWordItem>> GetFavoriteWordsAsync(
        LearningActor actor,
        LearningLimitFilter filter,
        CancellationToken cancellationToken = default);

    Task<LearningActionResult> ToggleFavoriteWordAsync(
        LearningActor actor,
        FavoriteWordCommand command,
        CancellationToken cancellationToken = default);

    Task<PracticeSessionItem> CreatePracticeSessionAsync(
        LearningActor actor,
        PracticeSessionCommand command,
        CancellationToken cancellationToken = default);

    Task<PracticeSessionDetailItem> GetPracticeSessionDetailAsync(
        LearningActor actor,
        PracticeSessionFilter filter,
        CancellationToken cancellationToken = default);

    Task<PracticeSessionReportItem> SubmitPracticeSessionAsync(
        LearningActor actor,
        PracticeSessionFilter filter,
        CancellationToken cancellationToken = default);

    Task<PracticeSessionReportItem> GetPracticeSessionReportAsync(
        LearningActor actor,
        PracticeSessionFilter filter,
        CancellationToken cancellationToken = default);

    Task<LearningList<PracticeSessionReportItem>> GetPracticeReportsAsync(
        LearningActor actor,
        PracticeSessionFilter filter,
        CancellationToken cancellationToken = default);

    Task<LearningList<PracticeHistoryItem>> GetPracticeHistoryAsync(
        LearningActor actor,
        PracticeSessionFilter filter,
        CancellationToken cancellationToken = default);
}
