'use client'; import React from 'react'; import { calculatePSS10Results } from '../../test/private/PSS10Calculator'; import { useScopedI18n } from '@/locales/client'; interface PSS10ResultProps { answers: string[]; } export function PSS10Result({ answers }: PSS10ResultProps) { const t = useScopedI18n('components.pss10Result'); // Convert answer format to the format required by calculator const answersMap: { [key: number]: string } = {}; answers.forEach((answer, index) => { answersMap[index + 1] = answer; }); const results = calculatePSS10Results({ answers: answersMap, questions: [] }); const severityDescriptions = { low: t('severityDescriptions.low'), moderate: t('severityDescriptions.moderate'), high: t('severityDescriptions.high') }; const getSeverityColor = (severity: string) => { switch (severity) { case "low": return "text-green-600 bg-green-50 border-green-200"; case "moderate": return "text-yellow-600 bg-yellow-50 border-yellow-200"; case "high": return "text-red-600 bg-red-50 border-red-200"; default: return "text-gray-600 bg-gray-50 border-gray-200"; } }; const questionTexts = [ t('questions.0'), t('questions.1'), t('questions.2'), t('questions.3'), t('questions.4'), t('questions.5'), t('questions.6'), t('questions.7'), t('questions.8'), t('questions.9') ]; const getScoreInterpretation = (score: number) => { if (score <= 13) return { level: t('scoreInterpretation.low_level'), color: "text-green-600", desc: t('scoreInterpretation.low_desc') }; if (score <= 26) return { level: t('scoreInterpretation.moderate_level'), color: "text-yellow-600", desc: t('scoreInterpretation.moderate_desc') }; return { level: t('scoreInterpretation.high_level'), color: "text-red-600", desc: t('scoreInterpretation.high_desc') }; }; const scoreInterp = getScoreInterpretation(results.totalScore); return (
{/* Overall score */}

{t('title')}

{/* Severity level description */}

{t('labels.result_interpretation')}

{severityDescriptions[results.severity as keyof typeof severityDescriptions]}

{t('labels.score_interpretation')}:
  • • {t('scoring.total_range')}
  • • {t('scoring.stress_perception_desc')}
  • • {t('scoring.coping_ability_desc')}
{t('labels.reference_standards')}:
  • • {t('scoring.range_0_13')}
  • • {t('scoring.range_14_26')}
  • • {t('scoring.range_27_40')}
{/* Subscale analysis */}

{t('labels.subscale_analysis')}

{/* Stress perception */}

{t('subscales.stress_perception_title')} ({results.stressPerceptionScore}/24分)

{t('subscales.stress_perception_desc')}

{/* Coping ability */}

{t('subscales.coping_ability_title')} ({results.copingAbilityScore}/16分)

{t('subscales.coping_ability_desc')}

{/* Item analysis */}

{t('labels.item_analysis')}

{results.itemAnalysis.map((item: any, index: number) => (
{index + 1}. {questionTexts[index]} {item.isReverse && ( {t('labels.reverse_scoring')} )}
{t('labels.original_score')}: {item.originalScore} {item.isReverse ? `→ ${t('labels.actual_score')}: ${item.actualScore}` : ''}
= 3 ? 'text-red-600' : item.actualScore >= 2 ? 'text-yellow-600' : 'text-green-600' }`}> {item.actualScore} {item.isHigh && ( {t('labels.high_stress')} )}
))}
{results.highScoreItemCount > 0 && (

{t('labels.high_score_reminder')}

{t('highScoreAnalysis.message', { count: results.highScoreItemCount })}
)}
{/* Stress management recommendations */}

{t('labels.stress_management_advice')}

{results.severity === "low" ? (
{t('advice.maintain_good_state')}:
  • {t('advice.maintain_good_state_item_1')}
  • {t('advice.maintain_good_state_item_2')}
  • {t('advice.maintain_good_state_item_3')}
  • {t('advice.maintain_good_state_item_4')}
) : (
{t('advice.stress_management_strategies')}:
{/* Short-term strategies */}

{t('advice.short_term_strategies')}

  • {t('advice.short_term_item_1')}
  • {t('advice.short_term_item_2')}
  • {t('advice.short_term_item_3')}
  • {t('advice.short_term_item_4')}
  • {t('advice.short_term_item_5')}
{/* Long-term strategies */}

{t('advice.long_term_strategies')}

  • {t('advice.long_term_item_1')}
  • {t('advice.long_term_item_2')}
  • {t('advice.long_term_item_3')}
  • {t('advice.long_term_item_4')}
  • {t('advice.long_term_item_5')}
)} {results.severity === "high" && (
{t('advice.high_stress_warning')}
)}

{t('labels.note')}:{t('disclaimer')}

); } interface MetricCardProps { title: string; value: React.ReactNode; className?: string; } function MetricCard({ title, value, className = '' }: MetricCardProps) { return (
{title} {value}
); }