'use client';
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
import { cn } from '@/lib/utils';
import {
type LifeDomainScore,
type LifeDomain,
LIFE_DOMAIN_META,
LIFE_DOMAINS,
getScoreColor,
getAverageScore,
} from '@/lib/types/leefgebieden';
import { LeefgebiedenBadge } from './leefgebieden-badge';
interface LeefgebiedenScoreBarProps {
score: LifeDomainScore;
showTarget?: boolean;
compact?: boolean;
}
/**
* Single life domain score as a progress bar
*/
export function LeefgebiedenScoreBar({
score,
showTarget = true,
compact = false,
}: LeefgebiedenScoreBarProps) {
const meta = LIFE_DOMAIN_META[score.domain];
const percentage = (score.current / 5) * 100;
const targetPercentage = (score.target / 5) * 100;
return (
{meta.emoji}
{meta.shortLabel}
{score.priority === 'hoog' && (
Prioriteit
)}
{score.current}
{showTarget && (
<>
→
{score.target}
>
)}
{/* Custom progress bar with domain-specific color */}
{showTarget && (
)}
);
}
interface LeefgebiedenScoresProps {
scores: LifeDomainScore[];
showTarget?: boolean;
compact?: boolean;
showSummary?: boolean;
className?: string;
}
/**
* Display all 7 life domain scores
*/
export function LeefgebiedenScores({
scores,
showTarget = true,
compact = false,
showSummary = true,
className,
}: LeefgebiedenScoresProps) {
// Ensure we have all 7 domains in the correct order
const orderedScores = LIFE_DOMAINS.map((domain) => {
const found = scores.find((s) => s.domain === domain);
return (
found || {
domain,
baseline: 3,
current: 3,
target: 4,
notes: '',
priority: 'middel' as const,
}
);
});
const avgCurrent = getAverageScore(orderedScores, 'current');
const avgTarget = getAverageScore(orderedScores, 'target');
const highPriority = orderedScores.filter((s) => s.priority === 'hoog');
return (
{showSummary && (
Gemiddelde score:{' '}
{avgCurrent}
{showTarget && (
→ {avgTarget}
)}
{highPriority.length > 0 && (
Prioriteiten:
{highPriority.map((s) => (
))}
)}
)}
{orderedScores.map((score) => (
))}
);
}
interface LeefgebiedenScoresCardProps {
scores: LifeDomainScore[];
title?: string;
showTarget?: boolean;
className?: string;
}
/**
* Life domain scores in a Card wrapper
*/
export function LeefgebiedenScoresCard({
scores,
title = 'Leefgebieden',
showTarget = true,
className,
}: LeefgebiedenScoresCardProps) {
return (
📊
{title}
);
}