{"version":3,"sources":["../src/components/Quiz/QuizResult.tsx"],"sourcesContent":["import { forwardRef, useEffect, useState } from 'react';\nimport { CardResults, CardStatus } from '../Card/Card';\nimport {\n  ANSWER_STATUS,\n  Question,\n  QuestionResult,\n  QUESTION_DIFFICULTY,\n  QUIZ_TYPE,\n  SUBTYPE_ENUM,\n  useQuizStore,\n} from './useQuizStore';\nimport ProgressCircle from '../ProgressCircle/ProgressCircle';\nimport { ClockIcon } from '@phosphor-icons/react/dist/csr/Clock';\nimport ProgressBar from '../ProgressBar/ProgressBar';\nimport { cn, getSubjectColorWithOpacity } from '../../utils/utils';\nimport Badge from '../Badge/Badge';\nimport { useTheme } from '../../hooks/useTheme';\nimport Button from '../Button/Button';\nimport { formatExamInfo } from './Quiz.utils';\n\nconst QuizBadge = ({\n  subtype,\n}: {\n  subtype: SUBTYPE_ENUM | undefined | string;\n}) => {\n  switch (subtype) {\n    case SUBTYPE_ENUM.PROVA:\n      return (\n        <Badge variant=\"examsOutlined\" action=\"exam2\" data-testid=\"quiz-badge\">\n          Prova\n        </Badge>\n      );\n    case SUBTYPE_ENUM.ENEM_PROVA_1:\n    case SUBTYPE_ENUM.ENEM_PROVA_2:\n      return (\n        <Badge variant=\"examsOutlined\" action=\"exam1\" data-testid=\"quiz-badge\">\n          Enem\n        </Badge>\n      );\n    case SUBTYPE_ENUM.VESTIBULAR:\n      return (\n        <Badge variant=\"examsOutlined\" action=\"exam4\" data-testid=\"quiz-badge\">\n          Vestibular\n        </Badge>\n      );\n    case SUBTYPE_ENUM.SIMULADO:\n    case SUBTYPE_ENUM.SIMULADAO:\n    case undefined:\n      return (\n        <Badge variant=\"examsOutlined\" action=\"exam3\" data-testid=\"quiz-badge\">\n          Simuladão\n        </Badge>\n      );\n    default:\n      return (\n        <Badge variant=\"solid\" action=\"info\" data-testid=\"quiz-badge\">\n          {subtype}\n        </Badge>\n      );\n  }\n};\n\nconst QuizHeaderResult = forwardRef<HTMLDivElement, { className?: string }>(\n  ({ className, ...props }, ref) => {\n    const {\n      getQuestionResultByQuestionId,\n      getCurrentQuestion,\n      questionsResult,\n    } = useQuizStore();\n    const [status, setStatus] = useState<ANSWER_STATUS | undefined>(undefined);\n    useEffect(() => {\n      const cq = getCurrentQuestion();\n      if (!cq) {\n        setStatus(undefined);\n        return;\n      }\n      const qr = getQuestionResultByQuestionId(cq.id);\n      setStatus(qr?.answerStatus);\n    }, [\n      getCurrentQuestion,\n      getQuestionResultByQuestionId,\n      getCurrentQuestion()?.id,\n      questionsResult,\n    ]);\n\n    const getClassesByAnswersStatus = () => {\n      // Guard para quando status ainda está carregando\n      if (status === undefined) {\n        return 'bg-gray-100';\n      }\n\n      switch (status) {\n        case ANSWER_STATUS.RESPOSTA_CORRETA:\n          return 'bg-success-background';\n        case ANSWER_STATUS.RESPOSTA_INCORRETA:\n          return 'bg-error-background';\n        case ANSWER_STATUS.PENDENTE_AVALIACAO:\n          return 'bg-info-background';\n        default:\n          return 'bg-error-background';\n      }\n    };\n\n    const getLabelByAnswersStatus = () => {\n      // Guard para quando status ainda está carregando\n      if (status === undefined) {\n        return 'Carregando...';\n      }\n\n      switch (status) {\n        case ANSWER_STATUS.RESPOSTA_CORRETA:\n          return '🎉 Parabéns!!';\n        case ANSWER_STATUS.RESPOSTA_INCORRETA:\n          return 'Não foi dessa vez...';\n        case ANSWER_STATUS.PENDENTE_AVALIACAO:\n          return 'Avaliação pendente';\n        case ANSWER_STATUS.NAO_RESPONDIDO:\n          return 'Não foi dessa vez...você deixou a resposta em branco';\n        default:\n          return 'Não foi dessa vez...você deixou a resposta em branco';\n      }\n    };\n    return (\n      <div\n        ref={ref}\n        className={cn(\n          'flex flex-row items-center gap-10 p-3.5 rounded-xl mb-4',\n          getClassesByAnswersStatus(),\n          className\n        )}\n        {...props}\n      >\n        <p className=\"text-text-950 font-bold text-lg\">Resultado</p>\n        <p className=\"text-text-700 text-md\">{getLabelByAnswersStatus()}</p>\n      </div>\n    );\n  }\n);\n\nconst getRetryButtonLabel = (type: QUIZ_TYPE | undefined) => {\n  switch (type) {\n    case QUIZ_TYPE.ATIVIDADE:\n      return 'Refazer atividade';\n    case QUIZ_TYPE.QUESTIONARIO:\n      return 'Repetir questionário';\n    case QUIZ_TYPE.SIMULADO:\n      return 'Repetir simulado';\n    default:\n      return 'Refazer';\n  }\n};\n\nconst QuizResultHeaderTitle = forwardRef<\n  HTMLDivElement,\n  {\n    className?: string;\n    showBadge?: boolean;\n    onRepeat?: () => void;\n    canRetry?: boolean;\n  }\n>(({ className, showBadge = true, onRepeat, canRetry, ...props }, ref) => {\n  const { quiz } = useQuizStore();\n  return (\n    <div\n      ref={ref}\n      className={cn(\n        'flex flex-row pt-4 justify-between items-center',\n        className\n      )}\n      {...props}\n    >\n      <p className=\"text-text-950 font-bold text-2xl\">Resultado</p>\n      <div className=\"flex flex-row gap-3 items-center\">\n        {canRetry && onRepeat && (\n          <Button\n            variant=\"solid\"\n            action=\"primary\"\n            size=\"medium\"\n            onClick={onRepeat}\n          >\n            {getRetryButtonLabel(quiz?.type)}\n          </Button>\n        )}\n\n        {showBadge && <QuizBadge subtype={quiz?.subtype || undefined} />}\n      </div>\n    </div>\n  );\n});\n\nconst QuizResultTitle = forwardRef<\n  HTMLParagraphElement,\n  { className?: string }\n>(({ className, ...props }, ref) => {\n  const { getQuizTitle } = useQuizStore();\n  const quizTitle = getQuizTitle();\n\n  return (\n    <p\n      className={cn('pt-6 pb-4 text-text-950 font-bold text-lg', className)}\n      ref={ref}\n      {...props}\n    >\n      {quizTitle}\n    </p>\n  );\n});\n\n/**\n * Update statistics counters based on difficulty level\n * @param stats - Statistics object to update\n * @param difficulty - Question difficulty level\n * @param isCorrect - Whether the answer is correct\n */\nconst updateDifficultyStats = (\n  stats: {\n    correctEasyAnswers: number;\n    correctMediumAnswers: number;\n    correctDifficultAnswers: number;\n    totalEasyQuestions: number;\n    totalMediumQuestions: number;\n    totalDifficultQuestions: number;\n  },\n  difficulty: string | undefined,\n  isCorrect: boolean\n) => {\n  if (difficulty === QUESTION_DIFFICULTY.FACIL) {\n    stats.totalEasyQuestions++;\n    if (isCorrect) stats.correctEasyAnswers++;\n  } else if (difficulty === QUESTION_DIFFICULTY.MEDIO) {\n    stats.totalMediumQuestions++;\n    if (isCorrect) stats.correctMediumAnswers++;\n  } else if (difficulty === QUESTION_DIFFICULTY.DIFICIL) {\n    stats.totalDifficultQuestions++;\n    if (isCorrect) stats.correctDifficultAnswers++;\n  }\n};\n\n/**\n * Calculate answer statistics by difficulty level\n * @param answers - Array of question answers\n * @returns Statistics object with counts by difficulty\n */\nconst calculateAnswerStatistics = (\n  answers: Array<{\n    answerStatus: string;\n    difficultyLevel?: string;\n  }>\n) => {\n  const stats = {\n    correctAnswers: 0,\n    correctEasyAnswers: 0,\n    correctMediumAnswers: 0,\n    correctDifficultAnswers: 0,\n    totalEasyQuestions: 0,\n    totalMediumQuestions: 0,\n    totalDifficultQuestions: 0,\n  };\n\n  for (const answer of answers) {\n    const isCorrect = answer.answerStatus === ANSWER_STATUS.RESPOSTA_CORRETA;\n\n    if (isCorrect) {\n      stats.correctAnswers++;\n    }\n\n    updateDifficultyStats(stats, answer.difficultyLevel, isCorrect);\n  }\n\n  return stats;\n};\n\nconst QuizResultPerformance = forwardRef<\n  HTMLDivElement,\n  { showDetails?: boolean }\n>(({ showDetails = true, ...props }, ref) => {\n  const {\n    getTotalQuestions,\n    formatTime,\n    getQuestionResultStatistics,\n    getQuestionResult,\n  } = useQuizStore();\n\n  const totalQuestions = getTotalQuestions();\n  const questionResult = getQuestionResult();\n\n  const stats = questionResult\n    ? calculateAnswerStatistics(questionResult.answers)\n    : {\n        correctAnswers: 0,\n        correctEasyAnswers: 0,\n        correctMediumAnswers: 0,\n        correctDifficultAnswers: 0,\n        totalEasyQuestions: 0,\n        totalMediumQuestions: 0,\n        totalDifficultQuestions: 0,\n      };\n\n  const percentage =\n    totalQuestions > 0\n      ? Math.round((stats.correctAnswers / totalQuestions) * 100)\n      : 0;\n\n  const classesJustifyBetween = showDetails\n    ? 'justify-between'\n    : 'justify-center';\n  return (\n    <div\n      className={cn(\n        'flex flex-row gap-6 p-6 rounded-xl bg-background',\n        classesJustifyBetween\n      )}\n      ref={ref}\n      {...props}\n    >\n      <div className=\"relative\">\n        <ProgressCircle\n          size=\"medium\"\n          variant=\"green\"\n          value={percentage}\n          showPercentage={false}\n          label=\"\"\n        />\n\n        <div className=\"absolute inset-0 flex flex-col items-center justify-center\">\n          {showDetails && (\n            <div className=\"flex items-center gap-1 mb-1\">\n              <ClockIcon size={12} weight=\"regular\" className=\"text-text-800\" />\n              <span className=\"text-2xs font-medium text-text-800\">\n                {formatTime(\n                  (getQuestionResultStatistics()?.timeSpent ?? 0) * 60\n                )}\n              </span>\n            </div>\n          )}\n\n          <div className=\"text-2xl font-medium text-text-800 leading-7\">\n            {getQuestionResultStatistics()?.correctAnswers ?? '--'} de{' '}\n            {totalQuestions}\n          </div>\n\n          <div className=\"text-2xs font-medium text-text-600 mt-1\">\n            Corretas\n          </div>\n        </div>\n      </div>\n\n      {showDetails && (\n        <div className=\"flex flex-col gap-4 w-full\">\n          <ProgressBar\n            className=\"w-full\"\n            layout=\"stacked\"\n            variant=\"green\"\n            value={stats.correctEasyAnswers}\n            max={stats.totalEasyQuestions}\n            label=\"Fáceis\"\n            showHitCount\n            labelClassName=\"text-base font-medium text-text-800 leading-none\"\n            percentageClassName=\"text-xs font-medium leading-[14px] text-right\"\n          />\n\n          <ProgressBar\n            className=\"w-full\"\n            layout=\"stacked\"\n            variant=\"green\"\n            value={stats.correctMediumAnswers}\n            max={stats.totalMediumQuestions}\n            label=\"Médias\"\n            showHitCount\n            labelClassName=\"text-base font-medium text-text-800 leading-none\"\n            percentageClassName=\"text-xs font-medium leading-[14px] text-right\"\n          />\n\n          <ProgressBar\n            className=\"w-full\"\n            layout=\"stacked\"\n            variant=\"green\"\n            value={stats.correctDifficultAnswers}\n            max={stats.totalDifficultQuestions}\n            label=\"Difíceis\"\n            showHitCount\n            labelClassName=\"text-base font-medium text-text-800 leading-none\"\n            percentageClassName=\"text-xs font-medium leading-[14px] text-right\"\n          />\n        </div>\n      )}\n    </div>\n  );\n});\n\nconst QuizListResult = forwardRef<\n  HTMLDivElement,\n  {\n    className?: string;\n    onSubjectClick?: (subject: string) => void;\n  }\n>(({ className, onSubjectClick, ...props }, ref) => {\n  const { getQuestionsGroupedBySubject } = useQuizStore();\n  const { isDark } = useTheme();\n  const groupedQuestions = getQuestionsGroupedBySubject();\n  const subjectsStats = Object.entries(groupedQuestions).map(\n    ([subjectId, questions]) => {\n      let correct = 0;\n      let incorrect = 0;\n\n      for (const question of questions) {\n        if (question.answerStatus === ANSWER_STATUS.RESPOSTA_CORRETA) {\n          correct++;\n        } else {\n          incorrect++;\n        }\n      }\n\n      return {\n        subject: {\n          name:\n            questions?.[0]?.knowledgeMatrix?.[0]?.subject?.name ??\n            'Sem matéria',\n          id: subjectId,\n          color: questions?.[0]?.knowledgeMatrix?.[0]?.subject?.color ?? '',\n          icon: questions?.[0]?.knowledgeMatrix?.[0]?.subject?.icon ?? '',\n        },\n        correct,\n        incorrect,\n        total: questions.length,\n      };\n    }\n  );\n\n  return (\n    <section ref={ref} className={className} {...props}>\n      <p className=\"pt-6 pb-4 text-text-950 font-bold text-lg\">Matérias</p>\n\n      <ul className=\"flex flex-col gap-2\">\n        {subjectsStats.map((subject) => (\n          <li key={subject.subject.id}>\n            <CardResults\n              onClick={() => onSubjectClick?.(subject.subject.id)}\n              className=\"max-w-full\"\n              header={subject.subject.name}\n              correct_answers={subject.correct}\n              incorrect_answers={subject.incorrect}\n              icon={subject.subject.icon || 'Book'}\n              color={\n                getSubjectColorWithOpacity(subject.subject.color, isDark) ||\n                undefined\n              }\n              direction=\"row\"\n            />\n          </li>\n        ))}\n      </ul>\n    </section>\n  );\n});\n\nconst QuizListResultByMateria = ({\n  subject,\n  onQuestionClick,\n  subjectName,\n}: {\n  subject: string;\n  onQuestionClick: (\n    question: Question | QuestionResult['answers'][number]\n  ) => void;\n  subjectName?: string;\n}) => {\n  const { getQuestionsGroupedBySubject, getQuestionIndex, quiz } =\n    useQuizStore();\n  const groupedQuestions = getQuestionsGroupedBySubject();\n\n  // Only show exam info (banca/year) for SIMULADO type\n  const shouldShowExamInfo = quiz?.type === QUIZ_TYPE.SIMULADO;\n\n  const answeredQuestions = groupedQuestions[subject] || [];\n  const formattedQuestions =\n    subject == 'all'\n      ? Object.values(groupedQuestions).flat()\n      : answeredQuestions;\n  return (\n    <div className=\"flex flex-col\">\n      <div className=\"flex flex-row pt-4 justify-between\">\n        <p className=\"text-text-950 font-bold text-2xl\">\n          {subjectName ||\n            formattedQuestions?.[0]?.knowledgeMatrix?.[0]?.subject?.name ||\n            'Sem matéria'}\n        </p>\n      </div>\n\n      <section className=\"flex flex-col \">\n        <p className=\"pt-6 pb-4 text-text-950 font-bold text-lg\">\n          Resultado das questões\n        </p>\n\n        <ul className=\"flex flex-col gap-2 pt-4\">\n          {formattedQuestions.map((question) => {\n            // questionId exists in QuestionResult answers, id in Question\n            const questionId =\n              'questionId' in question ? question.questionId : question.id;\n            const questionIndex = getQuestionIndex(questionId);\n\n            // examBoard and examYear only exist in Question type - only show for SIMULADO\n            const examBoard =\n              'examBoard' in question ? question.examBoard : null;\n            const examYear = 'examYear' in question ? question.examYear : null;\n            const examInfo = shouldShowExamInfo\n              ? formatExamInfo(examBoard, examYear)\n              : '';\n            const questionTitle = `Questão ${questionIndex.toString().padStart(2, '0')}`;\n            const header = examInfo\n              ? `${questionTitle} ${examInfo}`\n              : questionTitle;\n            return (\n              <li key={question.id}>\n                <CardStatus\n                  className=\"max-w-full\"\n                  header={header}\n                  status={(() => {\n                    if (\n                      question.answerStatus === ANSWER_STATUS.RESPOSTA_CORRETA\n                    )\n                      return 'correct';\n                    if (\n                      question.answerStatus === ANSWER_STATUS.RESPOSTA_INCORRETA\n                    )\n                      return 'incorrect';\n                    if (question.answerStatus === ANSWER_STATUS.NAO_RESPONDIDO)\n                      return 'unanswered';\n                    if (\n                      question.answerStatus === ANSWER_STATUS.PENDENTE_AVALIACAO\n                    )\n                      return 'pending';\n                    return undefined;\n                  })()}\n                  onClick={() => onQuestionClick?.(question)}\n                />\n              </li>\n            );\n          })}\n        </ul>\n      </section>\n    </div>\n  );\n};\n\nexport {\n  QuizListResultByMateria,\n  QuizListResult,\n  QuizResultPerformance,\n  QuizResultTitle,\n  QuizResultHeaderTitle,\n  QuizHeaderResult,\n};\n"],"mappings":"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","names":[]}