{"version":3,"sources":["../../../src/components/Quiz/useQuizStore.ts"],"sourcesContent":["import { create } from 'zustand';\nimport { devtools } from 'zustand/middleware';\n\nexport enum QUESTION_DIFFICULTY {\n  FACIL = 'FACIL',\n  MEDIO = 'MEDIO',\n  DIFICIL = 'DIFICIL',\n}\n\nexport enum QUESTION_TYPE {\n  ALTERNATIVA = 'ALTERNATIVA',\n  DISSERTATIVA = 'DISSERTATIVA',\n  MULTIPLA_CHOICE = 'MULTIPLA_CHOICE',\n}\n\nexport enum QUESTION_STATUS {\n  APROVADO = 'APROVADO',\n  REPROVADO = 'REPROVADO',\n}\n\nexport interface Question {\n  id: string;\n  questionText: string;\n  description: string;\n  type: QUESTION_TYPE;\n  status: QUESTION_STATUS;\n  difficulty: QUESTION_DIFFICULTY;\n  examBoard: string;\n  examYear: string;\n  answerKey: null | string;\n  institutionIds: string[];\n  knowledgeMatrix: {\n    areaKnowledgeId: string;\n    subjectId: string;\n    topicId: string;\n    subtopicId: string;\n    contentId: string;\n  }[];\n  options: {\n    id: string;\n    option: string;\n    isCorrect: boolean;\n  }[];\n}\n\ninterface Simulado {\n  id: string;\n  title: string;\n  category: string;\n  questions: Question[];\n}\n\ninterface Atividade {\n  id: string;\n  title: string;\n  questions: Question[];\n}\n\ninterface Aula {\n  id: string;\n  title: string;\n  questions: Question[];\n}\n\ninterface UserAnswerItem {\n  questionId: string;\n  activityId: string;\n  userId: string;\n  answer: string | null;\n  optionId: string | null;\n}\n\ninterface QuizState {\n  // Data\n  bySimulated?: Simulado;\n  byActivity?: Atividade;\n  byQuestionary?: Aula;\n\n  // UI State\n  currentQuestionIndex: number;\n  selectedAnswers: Record<string, string>;\n  userAnswers: UserAnswerItem[];\n  timeElapsed: number;\n  isStarted: boolean;\n  isFinished: boolean;\n  userId: string;\n  // Actions\n  setBySimulated: (simulado: Simulado) => void;\n  setByActivity: (atividade: Atividade) => void;\n  setByQuestionary: (aula: Aula) => void;\n  setUserId: (userId: string) => void;\n  setUserAnswers: (userAnswers: UserAnswerItem[]) => void;\n\n  // Quiz Navigation\n  goToNextQuestion: () => void;\n  goToPreviousQuestion: () => void;\n  goToQuestion: (index: number) => void;\n  getActiveQuiz: () => {\n    quiz: Simulado | Atividade | Aula;\n    type: 'bySimulated' | 'byActivity' | 'byQuestionary';\n  } | null;\n\n  // Quiz Actions\n  selectAnswer: (questionId: string, answerId: string) => void;\n  selectMultipleAnswer: (questionId: string, answerIds: string[]) => void;\n  skipQuestion: () => void;\n  addUserAnswer: (questionId: string, answerId?: string) => void;\n  startQuiz: () => void;\n  finishQuiz: () => void;\n  resetQuiz: () => void;\n\n  // Timer\n  updateTime: (time: number) => void;\n  startTimer: () => void;\n  stopTimer: () => void;\n\n  // Getters\n  getCurrentQuestion: () => Question | null;\n  getTotalQuestions: () => number;\n  getAnsweredQuestions: () => number;\n  getUnansweredQuestions: () => number[];\n  getSkippedQuestions: () => number;\n  getProgress: () => number;\n  isQuestionAnswered: (questionId: string) => boolean;\n  isQuestionSkipped: (questionId: string) => boolean;\n  getCurrentAnswer: () => string | undefined;\n  getAllCurrentAnswer: () => UserAnswerItem[] | undefined;\n  getQuizTitle: () => string;\n  formatTime: (seconds: number) => string;\n  getUserAnswers: () => UserAnswerItem[];\n  getUnansweredQuestionsFromUserAnswers: () => number[];\n  getQuestionsGroupedBySubject: () => { [key: string]: Question[] };\n  getUserId: () => string;\n  setCurrentQuestion: (question: Question) => void;\n\n  // New methods for userAnswers\n  getUserAnswerByQuestionId: (questionId: string) => UserAnswerItem | null;\n  isQuestionAnsweredByUserAnswers: (questionId: string) => boolean;\n  getQuestionStatusFromUserAnswers: (\n    questionId: string\n  ) => 'answered' | 'unanswered' | 'skipped';\n  getUserAnswersForActivity: () => UserAnswerItem[];\n}\n\nexport const useQuizStore = create<QuizState>()(\n  devtools(\n    (set, get) => {\n      let timerInterval: ReturnType<typeof setInterval> | null = null;\n\n      const startTimer = () => {\n        if (get().isFinished) {\n          return;\n        }\n\n        if (timerInterval) {\n          clearInterval(timerInterval);\n        }\n\n        timerInterval = setInterval(() => {\n          const { timeElapsed } = get();\n          set({ timeElapsed: timeElapsed + 1 });\n        }, 1000);\n      };\n\n      const stopTimer = () => {\n        if (timerInterval) {\n          clearInterval(timerInterval);\n          timerInterval = null;\n        }\n      };\n\n      return {\n        // Initial State\n        currentQuestionIndex: 0,\n        selectedAnswers: {},\n        userAnswers: [],\n        timeElapsed: 0,\n        isStarted: false,\n        isFinished: false,\n        userId: '',\n\n        // Setters\n        setBySimulated: (simulado) => set({ bySimulated: simulado }),\n        setByActivity: (atividade) => set({ byActivity: atividade }),\n        setByQuestionary: (aula) => set({ byQuestionary: aula }),\n        setUserId: (userId) => set({ userId }),\n        setUserAnswers: (userAnswers) => set({ userAnswers }),\n        getUserId: () => get().userId,\n\n        // Navigation\n        goToNextQuestion: () => {\n          const { currentQuestionIndex, getTotalQuestions } = get();\n          const totalQuestions = getTotalQuestions();\n\n          if (currentQuestionIndex < totalQuestions - 1) {\n            set({ currentQuestionIndex: currentQuestionIndex + 1 });\n          }\n        },\n\n        goToPreviousQuestion: () => {\n          const { currentQuestionIndex } = get();\n\n          if (currentQuestionIndex > 0) {\n            set({ currentQuestionIndex: currentQuestionIndex - 1 });\n          }\n        },\n\n        goToQuestion: (index) => {\n          const { getTotalQuestions } = get();\n          const totalQuestions = getTotalQuestions();\n\n          if (index >= 0 && index < totalQuestions) {\n            set({ currentQuestionIndex: index });\n          }\n        },\n\n        getActiveQuiz: () => {\n          const { bySimulated, byActivity, byQuestionary } = get();\n          if (bySimulated)\n            return { quiz: bySimulated, type: 'bySimulated' as const };\n          if (byActivity)\n            return { quiz: byActivity, type: 'byActivity' as const };\n          if (byQuestionary)\n            return { quiz: byQuestionary, type: 'byQuestionary' as const };\n          return null;\n        },\n\n        selectAnswer: (questionId, answerId) => {\n          const { getActiveQuiz, userAnswers } = get();\n          const activeQuiz = getActiveQuiz();\n\n          if (!activeQuiz) return;\n\n          const activityId = activeQuiz.quiz.id;\n          const userId = get().getUserId();\n\n          if (!userId || userId === '') {\n            console.warn('selectAnswer called before userId is set');\n            return;\n          }\n\n          const existingAnswerIndex = userAnswers.findIndex(\n            (answer) => answer.questionId === questionId\n          );\n\n          const newUserAnswer: UserAnswerItem = {\n            questionId,\n            activityId,\n            userId,\n            answer: null,\n            optionId: answerId,\n          };\n\n          let updatedUserAnswers;\n          if (existingAnswerIndex !== -1) {\n            updatedUserAnswers = [...userAnswers];\n            updatedUserAnswers[existingAnswerIndex] = newUserAnswer;\n          } else {\n            updatedUserAnswers = [...userAnswers, newUserAnswer];\n          }\n\n          set({\n            userAnswers: updatedUserAnswers,\n          });\n        },\n\n        selectMultipleAnswer: (questionId, answerIds) => {\n          const { getActiveQuiz, userAnswers } = get();\n          const activeQuiz = getActiveQuiz();\n\n          if (!activeQuiz) return;\n\n          const activityId = activeQuiz.quiz.id;\n          const userId = get().getUserId();\n\n          if (!userId || userId === '') {\n            console.warn('selectMultipleAnswer called before userId is set');\n            return;\n          }\n\n          // Remove all existing answers for this questionId\n          const filteredUserAnswers = userAnswers.filter(\n            (answer) => answer.questionId !== questionId\n          );\n\n          // Create new UserAnswerItem objects for each answerId\n          const newUserAnswers: UserAnswerItem[] = answerIds.map(\n            (answerId) => ({\n              questionId,\n              activityId,\n              userId,\n              answer: null,\n              optionId: answerId,\n            })\n          );\n\n          // Combine filtered answers with new answers\n          const updatedUserAnswers = [\n            ...filteredUserAnswers,\n            ...newUserAnswers,\n          ];\n\n          set({\n            userAnswers: updatedUserAnswers,\n          });\n        },\n\n        skipQuestion: () => {\n          const { getCurrentQuestion, userAnswers, getActiveQuiz } = get();\n          const currentQuestion = getCurrentQuestion();\n          const activeQuiz = getActiveQuiz();\n\n          if (!activeQuiz) return;\n\n          if (currentQuestion) {\n            const activityId = activeQuiz.quiz.id;\n            const userId = get().getUserId();\n\n            if (!userId || userId === '') {\n              console.warn('skipQuestion called before userId is set');\n              return;\n            }\n\n            const existingAnswerIndex = userAnswers.findIndex(\n              (answer) => answer.questionId === currentQuestion.id\n            );\n\n            const newUserAnswer: UserAnswerItem = {\n              questionId: currentQuestion.id,\n              activityId,\n              userId,\n              answer: null,\n              optionId: null,\n            };\n\n            let updatedUserAnswers;\n            if (existingAnswerIndex !== -1) {\n              // Update existing answer\n              updatedUserAnswers = [...userAnswers];\n              updatedUserAnswers[existingAnswerIndex] = newUserAnswer;\n            } else {\n              // Add new answer\n              updatedUserAnswers = [...userAnswers, newUserAnswer];\n            }\n\n            set({\n              userAnswers: updatedUserAnswers,\n            });\n          }\n        },\n\n        addUserAnswer: (questionId, answerId) => {\n          const { getActiveQuiz, userAnswers } = get();\n          const activeQuiz = getActiveQuiz();\n\n          if (!activeQuiz) return;\n\n          // Add to userAnswers array with new structure\n          const activityId = activeQuiz.quiz.id;\n          const userId = get().getUserId();\n\n          if (!userId || userId === '') {\n            console.warn('addUserAnswer called before userId is set');\n            return;\n          }\n\n          const existingAnswerIndex = userAnswers.findIndex(\n            (answer) => answer.questionId === questionId\n          );\n\n          const newUserAnswer: UserAnswerItem = {\n            questionId,\n            activityId,\n            userId,\n            answer: null,\n            optionId: answerId || null,\n          };\n\n          if (existingAnswerIndex !== -1) {\n            // Update existing answer\n            const updatedUserAnswers = [...userAnswers];\n            updatedUserAnswers[existingAnswerIndex] = newUserAnswer;\n            set({ userAnswers: updatedUserAnswers });\n          } else {\n            // Add new answer\n            set({ userAnswers: [...userAnswers, newUserAnswer] });\n          }\n        },\n\n        startQuiz: () => {\n          set({ isStarted: true, timeElapsed: 0 });\n          startTimer();\n        },\n\n        finishQuiz: () => {\n          set({ isFinished: true });\n          stopTimer();\n        },\n\n        resetQuiz: () => {\n          stopTimer();\n          set({\n            currentQuestionIndex: 0,\n            selectedAnswers: {},\n            userAnswers: [],\n            timeElapsed: 0,\n            isStarted: false,\n            isFinished: false,\n            userId: '',\n          });\n        },\n\n        // Timer\n        updateTime: (time) => set({ timeElapsed: time }),\n        startTimer,\n        stopTimer,\n\n        // Getters\n        getCurrentQuestion: () => {\n          const { currentQuestionIndex, getActiveQuiz } = get();\n          const activeQuiz = getActiveQuiz();\n\n          if (!activeQuiz) {\n            return null;\n          }\n\n          return activeQuiz.quiz.questions[currentQuestionIndex];\n        },\n\n        getTotalQuestions: () => {\n          const { getActiveQuiz } = get();\n          const activeQuiz = getActiveQuiz();\n\n          return activeQuiz?.quiz?.questions?.length || 0;\n        },\n\n        getAnsweredQuestions: () => {\n          const { userAnswers } = get();\n          return userAnswers.filter((answer) => answer.optionId !== null)\n            .length;\n        },\n\n        getUnansweredQuestions: () => {\n          const { getActiveQuiz, userAnswers } = get();\n          const activeQuiz = getActiveQuiz();\n          if (!activeQuiz) return [];\n\n          const unansweredQuestions: number[] = [];\n\n          activeQuiz.quiz.questions.forEach((question, index) => {\n            const userAnswer = userAnswers.find(\n              (answer) => answer.questionId === question.id\n            );\n            const isAnswered = userAnswer && userAnswer.optionId !== null;\n            const isSkipped = userAnswer && userAnswer.optionId === null;\n\n            if (!isAnswered && !isSkipped) {\n              unansweredQuestions.push(index + 1); // index + 1 para mostrar número da questão\n            }\n          });\n          return unansweredQuestions;\n        },\n\n        getSkippedQuestions: () => {\n          const { userAnswers } = get();\n          return userAnswers.filter((answer) => answer.optionId === null)\n            .length;\n        },\n\n        getProgress: () => {\n          const { getTotalQuestions, getAnsweredQuestions } = get();\n          const total = getTotalQuestions();\n          const answered = getAnsweredQuestions();\n\n          return total > 0 ? (answered / total) * 100 : 0;\n        },\n\n        isQuestionAnswered: (questionId) => {\n          const { userAnswers } = get();\n          const userAnswer = userAnswers.find(\n            (answer) => answer.questionId === questionId\n          );\n          return userAnswer ? userAnswer.optionId !== null : false;\n        },\n\n        isQuestionSkipped: (questionId) => {\n          const { userAnswers } = get();\n          const userAnswer = userAnswers.find(\n            (answer) => answer.questionId === questionId\n          );\n          return userAnswer ? userAnswer.optionId === null : false;\n        },\n\n        getCurrentAnswer: () => {\n          const { getCurrentQuestion, userAnswers } = get();\n          const currentQuestion = getCurrentQuestion();\n\n          if (!currentQuestion) return undefined;\n\n          const userAnswer = userAnswers.find(\n            (answer) => answer.questionId === currentQuestion.id\n          );\n          return userAnswer?.optionId;\n        },\n\n        getAllCurrentAnswer: () => {\n          const { getCurrentQuestion, userAnswers } = get();\n          const currentQuestion = getCurrentQuestion();\n\n          if (!currentQuestion) return undefined;\n\n          const userAnswer = userAnswers.filter(\n            (answer) => answer.questionId === currentQuestion.id\n          );\n\n          return userAnswer;\n        },\n\n        getQuizTitle: () => {\n          const { getActiveQuiz } = get();\n          const activeQuiz = getActiveQuiz();\n\n          return activeQuiz?.quiz?.title || 'Quiz';\n        },\n\n        formatTime: (seconds: number) => {\n          const minutes = Math.floor(seconds / 60);\n          const remainingSeconds = seconds % 60;\n          return `${minutes.toString().padStart(2, '0')}:${remainingSeconds.toString().padStart(2, '0')}`;\n        },\n\n        getUserAnswers: () => {\n          const { userAnswers } = get();\n          return userAnswers;\n        },\n\n        getUnansweredQuestionsFromUserAnswers: () => {\n          const { getActiveQuiz, userAnswers } = get();\n          const activeQuiz = getActiveQuiz();\n          if (!activeQuiz) return [];\n\n          const unansweredQuestions: number[] = [];\n\n          activeQuiz.quiz.questions.forEach((question, index) => {\n            const userAnswer = userAnswers.find(\n              (answer) => answer.questionId === question.id\n            );\n            const hasAnswer = userAnswer && userAnswer.optionId !== null;\n            const isSkipped = userAnswer && userAnswer.optionId === null;\n\n            // Se não há resposta do usuário OU se a questão foi pulada\n            if (!hasAnswer || isSkipped) {\n              unansweredQuestions.push(index + 1); // index + 1 para mostrar número da questão\n            }\n          });\n\n          return unansweredQuestions;\n        },\n\n        getQuestionsGroupedBySubject: () => {\n          const { getActiveQuiz } = get();\n          const activeQuiz = getActiveQuiz();\n          if (!activeQuiz) return {};\n\n          const groupedQuestions: { [key: string]: Question[] } = {};\n\n          activeQuiz.quiz.questions.forEach((question) => {\n            const subjectId =\n              question.knowledgeMatrix?.[0]?.subjectId || 'Sem matéria';\n\n            if (!groupedQuestions[subjectId]) {\n              groupedQuestions[subjectId] = [];\n            }\n\n            groupedQuestions[subjectId].push(question);\n          });\n\n          return groupedQuestions;\n        },\n\n        // New methods for userAnswers\n        getUserAnswerByQuestionId: (questionId) => {\n          const { userAnswers } = get();\n          return (\n            userAnswers.find((answer) => answer.questionId === questionId) ||\n            null\n          );\n        },\n        isQuestionAnsweredByUserAnswers: (questionId) => {\n          const { userAnswers } = get();\n          const answer = userAnswers.find(\n            (answer) => answer.questionId === questionId\n          );\n          return answer ? answer.optionId !== null : false;\n        },\n        getQuestionStatusFromUserAnswers: (questionId) => {\n          const { userAnswers } = get();\n          const answer = userAnswers.find(\n            (answer) => answer.questionId === questionId\n          );\n          if (!answer) return 'unanswered';\n          if (answer.optionId === null) return 'skipped';\n          return 'answered';\n        },\n        getUserAnswersForActivity: () => {\n          const { userAnswers } = get();\n          return userAnswers;\n        },\n        setCurrentQuestion: (question) => {\n          const { getActiveQuiz } = get();\n          const activeQuiz = getActiveQuiz();\n          if (!activeQuiz) return;\n\n          const questionIndex = activeQuiz.quiz.questions.findIndex(\n            (q) => q.id === question.id\n          );\n\n          // Validate that the question was found before updating currentQuestionIndex\n          if (questionIndex === -1) {\n            console.warn(\n              `Question with id \"${question.id}\" not found in active quiz`\n            );\n            return;\n          }\n\n          set({ currentQuestionIndex: questionIndex });\n        },\n      };\n    },\n    {\n      name: 'quiz-store',\n    }\n  )\n);\n"],"mappings":"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","names":["QUESTION_DIFFICULTY","QUESTION_TYPE","QUESTION_STATUS","answer"]}