{"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\n// Enum para tipos de quiz\nexport enum QUIZ_TYPE {\n  SIMULADO = 'SIMULADO',\n  QUESTIONARIO = 'QUESTIONARIO',\n  ATIVIDADE = 'ATIVIDADE',\n}\n\nexport enum QUESTION_TYPE {\n  ALTERNATIVA = 'ALTERNATIVA',\n  DISSERTATIVA = 'DISSERTATIVA',\n  MULTIPLA_ESCOLHA = 'MULTIPLA_ESCOLHA',\n  VERDADEIRO_FALSO = 'VERDADEIRO_FALSO',\n  LIGAR_PONTOS = 'LIGAR_PONTOS',\n  PREENCHER = 'PREENCHER',\n  IMAGEM = 'IMAGEM',\n}\n\nexport enum QUESTION_STATUS {\n  PENDENTE_AVALIACAO = 'PENDENTE_AVALIACAO',\n  RESPOSTA_CORRETA = 'RESPOSTA_CORRETA',\n  RESPOSTA_INCORRETA = 'RESPOSTA_INCORRETA',\n  NAO_RESPONDIDO = 'NAO_RESPONDIDO',\n}\n\nexport enum ANSWER_STATUS {\n  RESPOSTA_CORRETA = 'RESPOSTA_CORRETA',\n  RESPOSTA_INCORRETA = 'RESPOSTA_INCORRETA',\n  PENDENTE_AVALIACAO = 'PENDENTE_AVALIACAO',\n  NAO_RESPONDIDO = 'NAO_RESPONDIDO',\n}\n\nexport enum SUBTYPE_ENUM {\n  PROVA = 'PROVA',\n  ENEM_PROVA_1 = 'ENEM_PROVA_1',\n  ENEM_PROVA_2 = 'ENEM_PROVA_2',\n  VESTIBULAR = 'VESTIBULAR',\n  SIMULADO = 'SIMULADO',\n  SIMULADAO = 'SIMULADAO',\n}\n\nexport interface QuestionResult {\n  answers: {\n    id: string;\n    questionId: string;\n    answer: string | null;\n    selectedOptions: {\n      optionId: string;\n    }[];\n    answerStatus: ANSWER_STATUS;\n    statement: string;\n    questionType: QUESTION_TYPE;\n    difficultyLevel: QUESTION_DIFFICULTY;\n    solutionExplanation: string | null;\n    correctOption: string;\n    createdAt: string;\n    updatedAt: string;\n    options?: {\n      id: string;\n      option: string;\n      isCorrect: boolean;\n    }[];\n    knowledgeMatrix: {\n      areaKnowledge: {\n        id: string;\n        name: string;\n      } | null;\n      subject: {\n        id: string;\n        name: string;\n        color: string;\n        icon: string;\n      } | null;\n      topic: {\n        id: string;\n        name: string;\n      } | null;\n      subtopic: {\n        id: string;\n        name: string;\n      } | null;\n      content: {\n        id: string;\n        name: string;\n      } | null;\n    }[];\n    teacherFeedback: string | null;\n    attachment: string | null;\n    score: number | null;\n    gradedAt: string | null;\n    gradedBy: string | null;\n  }[];\n  statistics: {\n    totalAnswered: number;\n    correctAnswers: number;\n    incorrectAnswers: number;\n    pendingAnswers: number;\n    score: number;\n    timeSpent: number;\n  };\n}\n\nexport interface Question {\n  id: string;\n  statement: string;\n  questionType: QUESTION_TYPE;\n  difficultyLevel: QUESTION_DIFFICULTY;\n  description: string;\n  examBoard: string | null;\n  examYear: string | null;\n  solutionExplanation: string | null;\n  answer: null;\n  answerStatus: ANSWER_STATUS;\n  options: {\n    id: string;\n    option: string;\n  }[];\n  knowledgeMatrix: {\n    areaKnowledge: {\n      id: string;\n      name: string;\n    };\n    subject: {\n      id: string;\n      name: string;\n      color: string;\n      icon: string;\n    };\n    topic: {\n      id: string;\n      name: string;\n    };\n    subtopic: {\n      id: string;\n      name: string;\n    };\n    content: {\n      id: string;\n      name: string;\n    };\n  }[];\n  correctOptionIds?: string[];\n}\n\nexport interface QuizInterface {\n  id: string;\n  title: string;\n  type: QUIZ_TYPE;\n  subtype: SUBTYPE_ENUM | string;\n  difficulty: string | null;\n  notification: string | null;\n  status: string;\n  startDate: string | null;\n  finalDate: string | null;\n  canRetry: boolean;\n  createdAt: string | null;\n  updatedAt: string | null;\n  questions: Question[];\n}\n\nexport interface UserAnswerItem {\n  questionId: string;\n  activityId: string;\n  userId: string;\n  answer: string | null;\n  optionId: string | null;\n  questionType: QUESTION_TYPE;\n  answerStatus: ANSWER_STATUS;\n}\n\nexport interface QuizState {\n  // Data\n  quiz: QuizInterface | null;\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  variant: 'result' | 'default';\n  minuteCallback: (() => void) | null;\n  dissertativeCharLimit?: number;\n  // Actions\n  setQuiz: (quiz: QuizInterface) => void;\n  setQuestionResult: (questionResult: QuestionResult) => void;\n  setUserId: (userId: string) => void;\n  setUserAnswers: (userAnswers: UserAnswerItem[]) => void;\n  setVariant: (variant: 'result' | 'default') => void;\n  setDissertativeCharLimit: (limit?: number) => void;\n  getDissertativeCharLimit: () => number | undefined;\n  // Quiz Navigation\n  goToNextQuestion: () => void;\n  goToPreviousQuestion: () => void;\n  goToQuestion: (index: number) => void;\n\n  // Quiz Actions\n  selectAnswer: (questionId: string, answerId: string) => void;\n  selectMultipleAnswer: (questionId: string, answerIds: string[]) => void;\n  selectDissertativeAnswer: (questionId: string, answer: string) => void;\n  skipQuestion: () => void;\n  skipCurrentQuestionIfUnanswered: () => 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  // Minute Callback\n  setMinuteCallback: (callback: (() => void) | null) => void;\n  startMinuteCallback: () => void;\n  stopMinuteCallback: () => 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: () => UserAnswerItem | 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  getQuestionIndex: (questionId: string) => number;\n  getUserAnswerByQuestionId: (questionId: string) => UserAnswerItem | null;\n  isQuestionAnsweredByUserAnswers: (questionId: string) => boolean;\n  getQuestionStatusFromUserAnswers: (\n    questionId: string\n  ) => 'answered' | 'unanswered' | 'skipped';\n  getUserAnswersForActivity: () => UserAnswerItem[];\n  // Answer status management\n  setAnswerStatus: (questionId: string, status: ANSWER_STATUS) => void;\n  getAnswerStatus: (questionId: string) => ANSWER_STATUS | null;\n\n  // Question Result\n  questionsResult: QuestionResult | null;\n  currentQuestionResult: QuestionResult['answers'] | null;\n  setQuestionsResult: (questionsResult: QuestionResult) => void;\n  setCurrentQuestionResult: (\n    currentQuestionResult: QuestionResult['answers']\n  ) => void;\n  getQuestionResultByQuestionId: (\n    questionId: string\n  ) => QuestionResult['answers'][number] | null;\n  getQuestionResultStatistics: () => QuestionResult['statistics'] | null;\n  getQuestionResult: () => QuestionResult | null;\n  getCurrentQuestionResult: () => QuestionResult['answers'] | null;\n}\n\n// Constants\nexport const MINUTE_INTERVAL_MS = 60000; // 60 seconds = 1 minute\n\nexport const useQuizStore = create<QuizState>()(\n  devtools(\n    (set, get) => {\n      let timerInterval: ReturnType<typeof setInterval> | null = null;\n      let minuteCallbackInterval: 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      const setMinuteCallback = (callback: (() => void) | null) => {\n        set({ minuteCallback: callback });\n      };\n\n      const startMinuteCallback = () => {\n        const { minuteCallback, isFinished } = get();\n\n        if (isFinished || !minuteCallback) {\n          return;\n        }\n\n        if (minuteCallbackInterval) {\n          clearInterval(minuteCallbackInterval);\n        }\n\n        minuteCallbackInterval = setInterval(() => {\n          const {\n            minuteCallback: currentCallback,\n            isFinished: currentIsFinished,\n          } = get();\n\n          if (currentIsFinished || !currentCallback) {\n            stopMinuteCallback();\n            return;\n          }\n\n          currentCallback();\n        }, MINUTE_INTERVAL_MS);\n      };\n\n      const stopMinuteCallback = () => {\n        if (minuteCallbackInterval) {\n          clearInterval(minuteCallbackInterval);\n          minuteCallbackInterval = null;\n        }\n      };\n\n      return {\n        // Initial State\n        quiz: null,\n        currentQuestionIndex: 0,\n        selectedAnswers: {},\n        userAnswers: [],\n        timeElapsed: 0,\n        isStarted: false,\n        isFinished: false,\n        userId: '',\n        variant: 'default',\n        minuteCallback: null,\n        dissertativeCharLimit: undefined,\n        questionsResult: null,\n        currentQuestionResult: null,\n        // Setters\n        setQuiz: (quiz) => set({ quiz }),\n        setUserId: (userId) => set({ userId }),\n        setUserAnswers: (userAnswers) => set({ userAnswers }),\n        getUserId: () => get().userId,\n        setVariant: (variant) => set({ variant }),\n        setQuestionResult: (questionsResult) => set({ questionsResult }),\n        setDissertativeCharLimit: (limit?: number) =>\n          set({ dissertativeCharLimit: limit }),\n        getDissertativeCharLimit: () => get().dissertativeCharLimit,\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        selectAnswer: (questionId, answerId) => {\n          const { quiz, userAnswers } = get();\n\n          if (!quiz) return;\n\n          const activityId = quiz.id;\n          const userId = get().getUserId();\n\n          if (!userId || userId === '') {\n            // Silent validation - userId not set\n            return;\n          }\n\n          const question = quiz.questions.find((q) => q.id === questionId);\n          if (!question) return;\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:\n              question.questionType === QUESTION_TYPE.DISSERTATIVA\n                ? answerId\n                : null,\n            optionId:\n              question.questionType === QUESTION_TYPE.DISSERTATIVA\n                ? null\n                : answerId,\n            questionType: question.questionType,\n            answerStatus: ANSWER_STATUS.PENDENTE_AVALIACAO,\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 { quiz, userAnswers } = get();\n\n          if (!quiz) return;\n\n          const activityId = quiz.id;\n          const userId = get().getUserId();\n\n          if (!userId || userId === '') {\n            // Silent validation - userId not set\n            return;\n          }\n\n          const question = quiz.questions.find((q) => q.id === questionId);\n          if (!question) return;\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, // selectMultipleAnswer is for non-dissertative questions\n              optionId: answerId, // selectMultipleAnswer should only set optionId\n              questionType: question.questionType,\n              answerStatus: ANSWER_STATUS.PENDENTE_AVALIACAO,\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        selectDissertativeAnswer: (questionId, answer) => {\n          const { quiz, userAnswers, dissertativeCharLimit } = get();\n\n          if (!quiz) return;\n\n          const activityId = quiz.id;\n          const userId = get().getUserId();\n\n          if (!userId || userId === '') {\n            // Silent validation - userId not set\n            return;\n          }\n\n          const question = quiz.questions.find((q) => q.id === questionId);\n          if (\n            !question ||\n            question.questionType !== QUESTION_TYPE.DISSERTATIVA\n          ) {\n            // Silent validation - wrong question type\n            return;\n          }\n\n          // Validate character limit if set\n          let validatedAnswer = answer;\n          if (\n            dissertativeCharLimit !== undefined &&\n            answer.length > dissertativeCharLimit\n          ) {\n            validatedAnswer = answer.substring(0, dissertativeCharLimit);\n          }\n\n          const existingAnswerIndex = userAnswers.findIndex(\n            (answerItem) => answerItem.questionId === questionId\n          );\n\n          const newUserAnswer: UserAnswerItem = {\n            questionId,\n            activityId,\n            userId,\n            answer: validatedAnswer,\n            optionId: null,\n            questionType: QUESTION_TYPE.DISSERTATIVA,\n            answerStatus: ANSWER_STATUS.PENDENTE_AVALIACAO,\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        skipQuestion: () => {\n          const { getCurrentQuestion, userAnswers, quiz } = get();\n          const currentQuestion = getCurrentQuestion();\n\n          if (!quiz) return;\n\n          if (currentQuestion) {\n            const activityId = quiz.id;\n            const userId = get().getUserId();\n\n            if (!userId || userId === '') {\n              // Silent validation - userId not 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              questionType: currentQuestion.questionType,\n              answerStatus: ANSWER_STATUS.PENDENTE_AVALIACAO,\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        skipCurrentQuestionIfUnanswered: () => {\n          const { getCurrentQuestion, getCurrentAnswer, skipQuestion } = get();\n          const currentQuestion = getCurrentQuestion();\n          const currentAnswer = getCurrentAnswer();\n\n          // Se não há questão atual, não faz nada\n          if (!currentQuestion) return;\n\n          // Se não há resposta ou a resposta está vazia (null), marca como pulada\n          if (\n            !currentAnswer ||\n            (currentAnswer.optionId === null && currentAnswer.answer === null)\n          ) {\n            skipQuestion();\n          }\n        },\n\n        addUserAnswer: (questionId, answerId) => {\n          const { quiz, userAnswers } = get();\n\n          if (!quiz) return;\n\n          // Add to userAnswers array with new structure\n          const activityId = quiz.id;\n          const userId = get().getUserId();\n\n          if (!userId || userId === '') {\n            // Silent validation - userId not set\n            return;\n          }\n\n          const question = quiz.questions.find((q) => q.id === questionId);\n          if (!question) return;\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:\n              question.questionType === QUESTION_TYPE.DISSERTATIVA\n                ? answerId || null\n                : null,\n            optionId:\n              question.questionType !== QUESTION_TYPE.DISSERTATIVA\n                ? answerId || null\n                : null,\n            questionType: question.questionType,\n            answerStatus: ANSWER_STATUS.PENDENTE_AVALIACAO,\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          startMinuteCallback();\n        },\n\n        finishQuiz: () => {\n          set({ isFinished: true });\n          stopTimer();\n          stopMinuteCallback();\n        },\n\n        resetQuiz: () => {\n          stopTimer();\n          stopMinuteCallback();\n          set({\n            quiz: null,\n            currentQuestionIndex: 0,\n            selectedAnswers: {},\n            userAnswers: [],\n            timeElapsed: 0,\n            isStarted: false,\n            isFinished: false,\n            userId: '',\n            variant: 'default',\n            minuteCallback: null,\n            dissertativeCharLimit: undefined,\n            questionsResult: null,\n            currentQuestionResult: null,\n          });\n        },\n\n        // Timer\n        updateTime: (time) => set({ timeElapsed: time }),\n        startTimer,\n        stopTimer,\n\n        // Minute Callback\n        setMinuteCallback,\n        startMinuteCallback,\n        stopMinuteCallback,\n\n        // Getters\n        getCurrentQuestion: () => {\n          const { currentQuestionIndex, quiz } = get();\n\n          if (!quiz) {\n            return null;\n          }\n\n          return quiz.questions[currentQuestionIndex];\n        },\n\n        getTotalQuestions: () => {\n          const { quiz } = get();\n\n          return quiz?.questions?.length || 0;\n        },\n\n        getAnsweredQuestions: () => {\n          const { userAnswers } = get();\n          return userAnswers.filter(\n            (answer) => answer.optionId !== null || answer.answer !== null\n          ).length;\n        },\n\n        getUnansweredQuestions: () => {\n          const { quiz, userAnswers } = get();\n          if (!quiz) return [];\n\n          const unansweredQuestions: number[] = [];\n\n          quiz.questions.forEach((question, index) => {\n            const userAnswer = userAnswers.find(\n              (answer) => answer.questionId === question.id\n            );\n            const isAnswered =\n              userAnswer &&\n              (userAnswer.optionId !== null || userAnswer.answer !== null);\n            const isSkipped =\n              userAnswer &&\n              userAnswer.optionId === null &&\n              userAnswer.answer === 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(\n            (answer) => answer.optionId === null && answer.answer === 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\n            ? userAnswer.optionId !== null || userAnswer.answer !== null\n            : false;\n        },\n\n        isQuestionSkipped: (questionId) => {\n          const { userAnswers } = get();\n          const userAnswer = userAnswers.find(\n            (answer) => answer.questionId === questionId\n          );\n          return userAnswer\n            ? userAnswer.optionId === null && userAnswer.answer === null\n            : 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\n          // Retorna undefined se a resposta está vazia (não respondida)\n          const hasAnswerContent = (ua?: UserAnswerItem | null) =>\n            !!ua &&\n            ((ua.optionId !== null && ua.optionId !== '') ||\n              (ua.answer !== null && ua.answer !== ''));\n\n          if (!hasAnswerContent(userAnswer)) {\n            return undefined;\n          }\n\n          return userAnswer;\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 { quiz } = get();\n\n          return 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 { quiz, userAnswers } = get();\n          if (!quiz) return [];\n\n          const unansweredQuestions: number[] = [];\n\n          quiz.questions.forEach((question, index) => {\n            const userAnswer = userAnswers.find(\n              (answer) => answer.questionId === question.id\n            );\n            const hasAnswer =\n              userAnswer &&\n              (userAnswer.optionId !== null || userAnswer.answer !== null);\n            const isSkipped =\n              userAnswer &&\n              userAnswer.optionId === null &&\n              userAnswer.answer === 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 { getQuestionResult, quiz, variant } = get();\n          const questions =\n            variant == 'result'\n              ? getQuestionResult()?.answers\n              : quiz?.questions;\n          if (!questions) return {};\n          const groupedQuestions: {\n            [key: string]: (Question | QuestionResult['answers'][number])[];\n          } = {};\n          questions.forEach((question) => {\n            const subjectId =\n              question.knowledgeMatrix?.[0]?.subject?.id || '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\n            ? answer.optionId !== null || answer.answer !== null\n            : 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 { quiz, variant, questionsResult } = get();\n          if (!quiz) return;\n          let questionIndex = 0;\n          if (variant == 'result') {\n            if (!questionsResult) return;\n            const questionResult =\n              questionsResult.answers.find((q) => q.id === question.id) ??\n              questionsResult.answers.find((q) => q.questionId === question.id);\n            if (!questionResult) return;\n            questionIndex = quiz.questions.findIndex(\n              (q) => q.id === questionResult.questionId\n            );\n          } else {\n            questionIndex = quiz.questions.findIndex(\n              (q) => q.id === question.id\n            );\n          }\n\n          // Validate that the question was found before updating currentQuestionIndex\n          if (questionIndex === -1) {\n            // Silent validation - question not found\n            return;\n          }\n\n          set({ currentQuestionIndex: questionIndex });\n        },\n\n        setAnswerStatus: (questionId, status) => {\n          const { userAnswers } = get();\n          const existingAnswerIndex = userAnswers.findIndex(\n            (answer) => answer.questionId === questionId\n          );\n\n          if (existingAnswerIndex !== -1) {\n            const updatedUserAnswers = [...userAnswers];\n            updatedUserAnswers[existingAnswerIndex] = {\n              ...updatedUserAnswers[existingAnswerIndex],\n              answerStatus: status,\n            };\n            set({ userAnswers: updatedUserAnswers });\n          }\n        },\n\n        getAnswerStatus: (questionId) => {\n          const { userAnswers } = get();\n          const userAnswer = userAnswers.find(\n            (answer) => answer.questionId === questionId\n          );\n          return userAnswer ? userAnswer.answerStatus : null;\n        },\n        getQuestionIndex: (questionId) => {\n          const { questionsResult, variant, quiz } = get();\n          if (variant == 'result') {\n            if (!questionsResult) return 0;\n\n            let idx = questionsResult.answers.findIndex(\n              (q) => q.questionId === questionId\n            );\n            if (idx === -1) {\n              idx = questionsResult.answers.findIndex(\n                (q) => q.id === questionId\n              );\n            }\n            return idx !== -1 ? idx + 1 : 0;\n          } else {\n            if (!quiz) return 0;\n            const idx = quiz.questions.findIndex((q) => q.id === questionId);\n            return idx !== -1 ? idx + 1 : 0;\n          }\n        },\n\n        // Question Result\n        getQuestionResultByQuestionId: (questionId) => {\n          const { questionsResult } = get();\n          const question = questionsResult?.answers.find(\n            (answer) => answer.questionId === questionId\n          );\n\n          return question || null;\n        },\n        getQuestionResultStatistics: () => {\n          const { questionsResult } = get();\n          return questionsResult?.statistics || null;\n        },\n        getQuestionResult: () => {\n          const { questionsResult } = get();\n          return questionsResult;\n        },\n        setQuestionsResult: (questionsResult) => {\n          set({ questionsResult });\n        },\n        setCurrentQuestionResult: (currentQuestionResult) => {\n          set({ currentQuestionResult });\n        },\n        getCurrentQuestionResult: () => {\n          const { currentQuestionResult } = get();\n          return currentQuestionResult;\n        },\n      };\n    },\n    {\n      name: 'quiz-store',\n    }\n  )\n);\n"],"mappings":"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","names":["QUESTION_DIFFICULTY","QUIZ_TYPE","QUESTION_TYPE","QUESTION_STATUS","ANSWER_STATUS","SUBTYPE_ENUM","answer"]}