import { IImage } from "@ooneex/image"; import { IStatus } from "@ooneex/status"; import { ITag } from "@ooneex/tag"; import { IBase as IBase2, IStat } from "@ooneex/types"; import { IBase } from "@ooneex/types"; interface ILevel extends IBase { name: string; code: string; color: string; } declare enum ESessionType { /** Learning-focused session with detailed explanations and guided experience */ TRAINING = "training", /** Reinforcement session for solidifying already learned knowledge */ PRACTICE = "practice", /** Mock test environment simulating real exam conditions */ SIMULATION = "simulation", /** Quick knowledge check with immediate feedback */ QUIZ = "quiz", /** Competitive or difficult questions designed to test limits */ CHALLENGE = "challenge", /** Multiplayer competitive session with rankings and prizes */ TOURNAMENT = "tournament", /** Session for revisiting previously answered questions and mistakes */ REVIEW = "review", /** Initial assessment to identify knowledge gaps and skill levels */ DIAGNOSTIC = "diagnostic", /** Time-pressured rapid-fire questions focusing on speed and accuracy */ SPEED_TEST = "speed_test" } declare enum EAnswerState { CORRECT = "correct", INCORRECT = "incorrect" } declare enum EMcqQuestionChoiceLetter { A = "A", B = "B", C = "C", D = "D", E = "E", F = "F", G = "G", H = "H", I = "I", J = "J" } declare enum EMcqSessionStatus { DRAFT = "draft", STARTED = "started", PAUSED = "paused", COMPLETED = "completed" } interface IMcqQuestionChoice extends IBase2 { letter: EMcqQuestionChoiceLetter; text: string; isCorrect: boolean; explanation?: string; question: IMcqQuestion; } interface IMcqQuestion extends IBase2 { questionNumber: number; text: string; choices: IMcqQuestionChoice[]; context?: string; contextId?: string; stat?: IStat; status?: IStatus; image?: IImage; tags?: ITag[]; } interface IMcqSession extends IBase2 { name: string; totalQuestions: number; answeredCount: number; correctCount: number; incorrectCount: number; timing: number; questions: IMcqQuestion[]; status: EMcqSessionStatus; score: number; startedAt?: Date | null; pausedAt?: Date | null; resumedAt?: Date | null; completedAt?: Date | null; type: ESessionType; level: ILevel; } interface IMcqSessionQuestion extends IBase2 { session: IMcqSession; question: IMcqQuestion; questionNumber: number; selectedChoices: IMcqQuestionChoice[]; context?: string; contextId?: string; state: EAnswerState; score: number; } interface IMcqQuestionShared extends IBase2 { question?: IMcqQuestion; questionId?: string; sharedWith?: string; sharedById?: string; permission?: string; expiresAt?: string; } interface IMcqQuestionLiked extends IBase2 { question?: IMcqQuestion; questionId?: string; likedBy?: string; likedById?: string; } interface IMcqQuestionComment extends IBase2 { question?: IMcqQuestion; questionId?: string; comment: string; commentedBy?: string; commentedById?: string; parentCommentId?: string; } interface IMcqQuestionDisliked extends IBase2 { question?: IMcqQuestion; questionId?: string; dislikedBy?: string; dislikedById?: string; } interface IMcqQuestionSaved extends IBase2 { question?: IMcqQuestion; questionId?: string; savedBy?: string; savedById?: string; } interface IMcqQuestionReport extends IBase2 { question?: IMcqQuestion; questionId?: string; reason: string; description?: string; reportedBy?: string; reportedById?: string; status?: IStatus; } interface IMcqQuestionViewed extends IBase2 { question?: IMcqQuestion; questionId?: string; viewedBy?: string; viewedById?: string; } interface IMcqQuestionStat extends IBase2 { question?: IMcqQuestion; questionId?: string; likesCount?: number; dislikesCount?: number; commentsCount?: number; sharesCount?: number; savesCount?: number; viewsCount?: number; reportsCount?: number; } export { IMcqSessionQuestion, IMcqSession, IMcqQuestionViewed, IMcqQuestionStat, IMcqQuestionShared, IMcqQuestionSaved, IMcqQuestionReport, IMcqQuestionLiked, IMcqQuestionDisliked, IMcqQuestionComment, IMcqQuestionChoice, IMcqQuestion, EMcqSessionStatus, EMcqQuestionChoiceLetter };