'use client'; import React from 'react'; import { useScopedI18n } from '@/locales/client'; import { calculateNPDResults } from '../../test/private/NPDCalculator'; function useLabels() { const t = useScopedI18n('components.npdResult'); return { totalScore: t('totalScore'), percentile: t('percentile'), leadership: t('leadership'), exhibitionism: t('exhibitionism'), narcissisticTraitsLevel: t('narcissisticTraitsLevel'), dominantTrait: t('dominantTrait'), entitlement: t('entitlement'), interpretation: t('interpretation'), understandingTraits: t('understandingTraits'), factorBreakdown: t('factorBreakdown'), importantNotes: t('importantNotes'), healthyVsProblematic: t('healthyVsProblematic'), interpretationLevels: { low: t('interpretationLevels.low'), average: t('interpretationLevels.average'), above_average: t('interpretationLevels.above_average'), high: t('interpretationLevels.high'), }, traitLabels: { leadership: t('traitLabels.leadership'), exhibitionism: t('traitLabels.exhibitionism'), entitlement: t('traitLabels.entitlement'), }, factorDescriptions: { leadership: t('factorDescriptions.leadership'), exhibitionism: t('factorDescriptions.exhibitionism'), entitlement: t('factorDescriptions.entitlement'), }, notes: { continuum: t('notes.continuum'), adaptive: t('notes.adaptive'), disorder: t('notes.disorder'), purpose: t('notes.purpose'), population: t('notes.population'), }, healthyAspects: t('healthyAspects'), potentialConcerns: t('potentialConcerns'), balanceKey: t('balanceKey'), recommendationTexts: { high: t('recommendationTexts.high'), above_average: t('recommendationTexts.above_average'), low: t('recommendationTexts.low'), }, }; } export function NPDResult({ answers, }: { answers: string[]; }) { const labels = useLabels(); // Convert answers array to object format expected by calculator const answersObj: { [key: number]: string } = {}; answers.forEach((answer, index) => { answersObj[index + 1] = answer; }); const results = calculateNPDResults({ answers: answersObj, questions: [] }); const getInterpretationColor = (interpretation: string) => { switch (interpretation) { case 'low': return 'text-green-600'; case 'average': return 'text-blue-600'; case 'above_average': return 'text-yellow-600'; case 'high': return 'text-red-600'; default: return 'text-gray-600'; } }; const getInterpretationLabel = (interpretation: string) => { return labels.interpretationLevels[interpretation as keyof typeof labels.interpretationLevels] || 'Unknown'; }; const getDominantTraitLabel = (trait: string) => { return labels.traitLabels[trait as keyof typeof labels.traitLabels] || 'Unknown'; }; return (

{labels.narcissisticTraitsLevel}

{getInterpretationLabel(results.interpretation)}

Score: {results.totalScore}/16 (≈{results.percentile}th percentile)

{labels.dominantTrait}

{getDominantTraitLabel(results.dominantTrait)}

{labels.entitlement}: {results.factorScores.entitlement}

{labels.interpretation}

{results.interpretation === "high" ? labels.recommendationTexts.high : results.interpretation === "above_average" ? labels.recommendationTexts.above_average : labels.recommendationTexts.low}

{labels.understandingTraits}

{labels.factorBreakdown}:

  • {labels.traitLabels.leadership} ({results.factorScores.leadership}): {labels.factorDescriptions.leadership}
  • {labels.traitLabels.exhibitionism} ({results.factorScores.exhibitionism}): {labels.factorDescriptions.exhibitionism}
  • {labels.traitLabels.entitlement} ({results.factorScores.entitlement}): {labels.factorDescriptions.entitlement}

{labels.importantNotes}

{labels.healthyVsProblematic}

{labels.healthyAspects}

{labels.potentialConcerns}

{labels.balanceKey}

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