{"version":3,"sources":["../src/components/StudentPerformanceDetailsModal/StudentPerformanceDetailsModal.tsx"],"sourcesContent":["import { useMemo, type ReactNode } from 'react';\nimport { UserIcon, TrophyIcon, XCircleIcon } from '@phosphor-icons/react';\nimport Modal from '../Modal/Modal';\nimport Text from '../Text/Text';\nimport Badge from '../Badge/Badge';\nimport ProgressBar from '../ProgressBar/ProgressBar';\nimport { CardAccordation } from '../Accordation/Accordation';\nimport type {\n  StudentPerformanceDetailsModalProps,\n  StudentPerformanceDetailsData,\n  StudentPerformanceDetailsLabels,\n  ActivityProgress,\n} from './types';\nimport { DEFAULT_PERFORMANCE_DETAILS_LABELS } from './types';\nimport { MetricBox } from '../shared/MetricBox';\n\n/**\n * Performance stat card with colored header and white footer\n * Used for NOTA, CORRETAS, INCORRETAS cards\n */\ninterface PerformanceStatCardProps {\n  /** Icon to display */\n  icon: ReactNode;\n  /** Card label (e.g., \"NOTA\") */\n  label: string;\n  /** Main value (e.g., \"9.0\" or \"8\") */\n  value: string | number;\n  /** Secondary label (e.g., \"DESEMPENHO\") */\n  secondaryLabel: string;\n  /** Badge text (e.g., \"Acima da média\") */\n  badgeText: string | null;\n  /** Color variant */\n  variant: 'orange' | 'green' | 'red';\n}\n\nconst STAT_CARD_COLORS = {\n  orange: {\n    headerBg: 'bg-warning-background',\n    iconBg: 'bg-warning-300',\n    valueColor: 'text-warning-600',\n    secondaryLabelColor: 'text-warning-500',\n  },\n  green: {\n    headerBg: 'bg-success-200',\n    iconBg: 'bg-success-300',\n    valueColor: 'text-success-700',\n    secondaryLabelColor: 'text-success-600',\n  },\n  red: {\n    headerBg: 'bg-error-100',\n    iconBg: 'bg-error-500',\n    valueColor: 'text-error-700',\n    secondaryLabelColor: 'text-error-300',\n  },\n  default: {\n    headerBg: 'bg-warning-background',\n    iconBg: 'bg-warning-300',\n    valueColor: 'text-warning-600',\n    secondaryLabelColor: 'text-warning-500',\n  },\n} as const;\n\n/**\n * Performance stat card component\n */\nconst PerformanceStatCard = ({\n  icon,\n  label,\n  value,\n  secondaryLabel,\n  badgeText,\n  variant,\n}: PerformanceStatCardProps) => {\n  const colors = STAT_CARD_COLORS[variant] ?? STAT_CARD_COLORS.default;\n\n  return (\n    <div className=\"flex flex-col rounded-xl border border-border-50 bg-background overflow-hidden flex-1\">\n      {/* Header section with colored background */}\n      <div\n        className={`flex flex-col items-center justify-center px-2 sm:px-3 py-2 gap-1 ${colors.headerBg}`}\n      >\n        <Text\n          as=\"span\"\n          className={`size-8 rounded-full flex items-center justify-center ${colors.iconBg}`}\n        >\n          {icon}\n        </Text>\n        <Text\n          size=\"2xs\"\n          weight=\"medium\"\n          className=\"text-text-800 uppercase text-center leading-none\"\n        >\n          {label}\n        </Text>\n        <Text\n          size=\"xl\"\n          weight=\"bold\"\n          className={`${colors.valueColor} text-center`}\n        >\n          {value}\n        </Text>\n      </div>\n\n      {/* Footer section with white background */}\n      <div className=\"flex flex-col items-center gap-2 px-2 sm:px-3 py-2\">\n        <Text\n          size=\"2xs\"\n          weight=\"medium\"\n          className={`${colors.secondaryLabelColor} uppercase text-center`}\n        >\n          {secondaryLabel}\n        </Text>\n        <Badge size=\"large\" action=\"info\">\n          {badgeText || '-'}\n        </Badge>\n      </div>\n    </div>\n  );\n};\n\n/**\n * Activity progress card with expandable accordion content\n */\ninterface ActivityCardProps {\n  /** Activity data */\n  activity: ActivityProgress;\n  /** No data message */\n  noDataMessage: string;\n  /** Activity progress text template */\n  activityProgressText: string;\n  /** Activity details unavailable message */\n  activityDetailsUnavailable: string;\n}\n\n/**\n * Format activity progress text by replacing placeholders\n */\nconst formatProgressText = (\n  template: string,\n  correct: number,\n  total: number\n): string => {\n  return template\n    .replace('{correct}', String(correct))\n    .replace('{total}', String(total));\n};\n\nconst ActivityAccordionCard = ({\n  activity,\n  noDataMessage,\n  activityProgressText,\n  activityDetailsUnavailable,\n}: ActivityCardProps) => {\n  const hasData = !activity.hasNoData && activity.totalCount > 0;\n  const progressPercentage = hasData\n    ? Math.min(\n        100,\n        Math.max(0, (activity.correctCount / activity.totalCount) * 100)\n      )\n    : 0;\n\n  return (\n    <CardAccordation\n      value={activity.id}\n      className=\"bg-background rounded-xl border border-border-50\"\n      triggerClassName=\"p-4\"\n      contentClassName=\"px-4 pb-4\"\n      trigger={\n        <div className=\"flex flex-col gap-2 flex-1\">\n          <Text size=\"lg\" weight=\"bold\" className=\"text-text-950\">\n            {activity.name}\n          </Text>\n          {hasData ? (\n            <div className=\"flex flex-row items-center gap-2\">\n              <div className=\"flex-1\">\n                <ProgressBar\n                  value={progressPercentage}\n                  variant=\"green\"\n                  size=\"medium\"\n                />\n              </div>\n              <Text\n                size=\"xs\"\n                weight=\"medium\"\n                className=\"text-text-950 whitespace-nowrap\"\n              >\n                {formatProgressText(\n                  activityProgressText,\n                  activity.correctCount,\n                  activity.totalCount\n                )}\n              </Text>\n            </div>\n          ) : (\n            <Text size=\"xs\" className=\"text-text-500\">\n              {noDataMessage}\n            </Text>\n          )}\n        </div>\n      }\n    >\n      <Text size=\"sm\" className=\"text-text-700\">\n        {activity.description || activityDetailsUnavailable}\n      </Text>\n    </CardAccordation>\n  );\n};\n\n/**\n * Loading skeleton for the modal content\n */\nconst LoadingSkeleton = () => (\n  <div className=\"flex flex-col gap-4 animate-pulse\">\n    <div className=\"h-6 bg-background-200 rounded w-48\" />\n    <div className=\"grid grid-cols-1 sm:grid-cols-3 gap-2\">\n      <div className=\"h-48 bg-background-200 rounded-xl\" />\n      <div className=\"h-48 bg-background-200 rounded-xl\" />\n      <div className=\"h-48 bg-background-200 rounded-xl\" />\n    </div>\n    <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-2\">\n      <div className=\"h-20 bg-background-200 rounded-xl\" />\n      <div className=\"h-20 bg-background-200 rounded-xl\" />\n    </div>\n    <div className=\"grid grid-cols-1 sm:grid-cols-3 gap-2\">\n      <div className=\"h-20 bg-background-200 rounded-xl\" />\n      <div className=\"h-20 bg-background-200 rounded-xl\" />\n      <div className=\"h-20 bg-background-200 rounded-xl\" />\n    </div>\n  </div>\n);\n\n/**\n * Error state component\n */\nconst ErrorContent = ({ message }: { message: string }) => (\n  <div className=\"flex flex-col items-center justify-center py-8 gap-3\">\n    <Text\n      as=\"span\"\n      className=\"size-12 rounded-full bg-error-100 flex items-center justify-center\"\n    >\n      <XCircleIcon size={24} className=\"text-error-700\" weight=\"fill\" />\n    </Text>\n    <Text size=\"md\" className=\"text-error-700 text-center\">\n      {message}\n    </Text>\n  </div>\n);\n\n/**\n * Performance content when data is available\n */\nconst PerformanceContent = ({\n  data,\n  labels,\n}: {\n  data: StudentPerformanceDetailsData;\n  labels: StudentPerformanceDetailsLabels;\n}) => (\n  <div className=\"flex flex-col gap-4\">\n    {/* Student name with icon */}\n    <div className=\"flex items-center gap-2 pt-2\">\n      <Text\n        as=\"span\"\n        className=\"size-6 rounded-full bg-primary-100 flex items-center justify-center\"\n      >\n        <UserIcon size={14} className=\"text-primary-800\" weight=\"fill\" />\n      </Text>\n      <Text size=\"md\" className=\"text-text-950\">\n        {data.studentName}\n      </Text>\n    </div>\n\n    {/* Main stats row - 3 colored cards */}\n    <div className=\"flex flex-col sm:flex-row gap-2 sm:gap-3\">\n      {/* NOTA card */}\n      <PerformanceStatCard\n        icon={<TrophyIcon size={16} weight=\"fill\" className=\"text-white\" />}\n        label={labels.gradeLabel}\n        value={data.grade.value.toFixed(1)}\n        secondaryLabel={labels.performanceTagLabel}\n        badgeText={data.grade.performanceLabel}\n        variant=\"orange\"\n      />\n\n      {/* CORRETAS card */}\n      <PerformanceStatCard\n        icon={<TrophyIcon size={16} weight=\"fill\" className=\"text-text-950\" />}\n        label={labels.correctQuestionsLabel}\n        value={data.correctQuestions.value}\n        secondaryLabel={labels.bestResultLabel}\n        badgeText={data.correctQuestions.bestResultTopic}\n        variant=\"green\"\n      />\n\n      {/* INCORRETAS card */}\n      <PerformanceStatCard\n        icon={<XCircleIcon size={16} weight=\"fill\" className=\"text-white\" />}\n        label={labels.incorrectQuestionsLabel}\n        value={data.incorrectQuestions.value}\n        secondaryLabel={labels.hardestTopicLabel}\n        badgeText={data.incorrectQuestions.hardestTopic}\n        variant=\"red\"\n      />\n    </div>\n\n    {/* Secondary stats row */}\n    <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-2 sm:gap-3\">\n      <MetricBox\n        label={labels.activitiesLabel}\n        value={data.activitiesCompleted}\n      />\n      <MetricBox label={labels.questionsLabel} value={data.questionsAnswered} />\n    </div>\n\n    {/* Tertiary stats row */}\n    <div className=\"grid grid-cols-1 sm:grid-cols-3 gap-2 sm:gap-3\">\n      <MetricBox label={labels.accessCountLabel} value={data.accessCount} />\n      <MetricBox label={labels.timeOnlineLabel} value={data.timeOnline} />\n      <MetricBox label={labels.lastLoginLabel} value={data.lastLogin} />\n    </div>\n\n    {/* Activities progress section */}\n    {data.activities.length > 0 && (\n      <div className=\"flex flex-col gap-4 pt-4\">\n        <Text size=\"lg\" weight=\"bold\" className=\"text-text-950\">\n          {labels.activitiesProgressTitle}\n        </Text>\n        <div className=\"flex flex-col gap-2\">\n          {data.activities.map((activity) => (\n            <ActivityAccordionCard\n              key={activity.id}\n              activity={activity}\n              noDataMessage={labels.noDataMessage}\n              activityProgressText={labels.activityProgressText}\n              activityDetailsUnavailable={labels.activityDetailsUnavailable}\n            />\n          ))}\n        </div>\n      </div>\n    )}\n  </div>\n);\n\n/**\n * Renders the modal content based on loading, error, and data state\n */\nconst renderModalContent = (\n  loading: boolean,\n  error: string | null | undefined,\n  data: StudentPerformanceDetailsData | null,\n  labels: StudentPerformanceDetailsLabels\n): ReactNode => {\n  if (loading) {\n    return <LoadingSkeleton />;\n  }\n\n  if (error) {\n    return <ErrorContent message={error} />;\n  }\n\n  if (data) {\n    return <PerformanceContent data={data} labels={labels} />;\n  }\n\n  return null;\n};\n\n/**\n * StudentPerformanceDetailsModal component\n *\n * Displays a modal with detailed student performance information including:\n * - Student name with profile icon\n * - Three main stat cards (grade, correct questions, incorrect questions)\n * - Five metric cards (activities, questions, access, time, last login)\n * - Expandable list of activity progress\n *\n * @example\n * ```tsx\n * <StudentPerformanceDetailsModal\n *   isOpen={isModalOpen}\n *   onClose={() => setIsModalOpen(false)}\n *   data={{\n *     studentName: 'Fernanda Rocha',\n *     grade: { value: 9.0, performanceLabel: 'Acima da média' },\n *     correctQuestions: { value: 8, bestResultTopic: 'Fotossíntese' },\n *     incorrectQuestions: { value: 7, hardestTopic: 'Células' },\n *     activitiesCompleted: 10,\n *     questionsAnswered: 40,\n *     accessCount: '00',\n *     timeOnline: '00:00:00',\n *     lastLogin: '00/00/0000 • 00:00h',\n *     activities: [\n *       { id: '1', name: 'Atividade 1', correctCount: 30, totalCount: 50 },\n *       { id: '2', name: 'Atividade 2', correctCount: 0, totalCount: 0, hasNoData: true },\n *     ],\n *   }}\n * />\n * ```\n */\nexport const StudentPerformanceDetailsModal = ({\n  isOpen,\n  onClose,\n  data,\n  loading = false,\n  error = null,\n  labels: customLabels,\n}: StudentPerformanceDetailsModalProps) => {\n  const labels = useMemo(\n    () => ({ ...DEFAULT_PERFORMANCE_DETAILS_LABELS, ...customLabels }),\n    [customLabels]\n  );\n\n  if (!data && !loading && !error) {\n    return null;\n  }\n\n  return (\n    <Modal\n      isOpen={isOpen}\n      onClose={onClose}\n      title={labels.title}\n      size=\"lg\"\n      contentClassName=\"max-h-[80vh] overflow-y-auto\"\n    >\n      {renderModalContent(loading, error, data, labels)}\n    </Modal>\n  );\n};\n\nexport default StudentPerformanceDetailsModal;\n"],"mappings":"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","names":[]}