'use client' import { motion } from 'framer-motion' import AnimatedCounter from './AnimatedCounter' interface UnitEconomicsCardsProps { cac: number ltv: number ltvCacRatio: number grossMargin: number churnRate: number lang: 'de' | 'en' } function MiniRing({ progress, color, size = 32 }: { progress: number; color: string; size?: number }) { const radius = (size / 2) - 3 const circumference = 2 * Math.PI * radius const offset = circumference - (Math.min(progress, 100) / 100) * circumference return ( ) } export default function UnitEconomicsCards({ cac, ltv, ltvCacRatio, grossMargin, churnRate, lang }: UnitEconomicsCardsProps) { const cacPayback = cac > 0 ? Math.ceil(cac / ((ltv / (1 / (churnRate / 100))) || 1)) : 0 const cards = [ { label: 'CAC Payback', value: cacPayback, suffix: lang === 'de' ? ' Mo.' : ' mo.', ring: Math.min((cacPayback / 12) * 100, 100), color: cacPayback <= 6 ? '#22c55e' : cacPayback <= 12 ? '#eab308' : '#ef4444', sub: `CAC: ${cac.toLocaleString('de-DE')} EUR`, }, { label: 'LTV', value: Math.round(ltv), suffix: ' EUR', ring: Math.min(ltvCacRatio * 10, 100), color: ltvCacRatio >= 3 ? '#22c55e' : ltvCacRatio >= 1.5 ? '#eab308' : '#ef4444', sub: `LTV/CAC: ${ltvCacRatio.toFixed(1)}x`, }, { label: 'Gross Margin', value: grossMargin, suffix: '%', ring: grossMargin, color: grossMargin >= 70 ? '#22c55e' : grossMargin >= 50 ? '#eab308' : '#ef4444', sub: `Churn: ${churnRate}%`, }, ] return (
{card.label}
{card.sub}