'use client' import { Language } from '@/lib/types' import { useFinancialModel } from '@/lib/hooks/useFinancialModel' import { t } from '@/lib/i18n' import GradientText from '../ui/GradientText' import FadeInView from '../ui/FadeInView' import GlassCard from '../ui/GlassCard' import { SlidersHorizontal, TrendingUp, TrendingDown, Minus } from 'lucide-react' interface AssumptionsSlideProps { lang: Language } interface SensitivityResult { label: string base: string bull: string bear: string } export default function AssumptionsSlide({ lang }: AssumptionsSlideProps) { const i = t(lang) const fm = useFinancialModel() const de = lang === 'de' const baseScenario = fm.scenarios.find(s => s.name === 'Base Case') const bullScenario = fm.scenarios.find(s => s.name === 'Bull Case') const bearScenario = fm.scenarios.find(s => s.name === 'Bear Case') function getVal(scenario: typeof baseScenario, key: string): string { if (!scenario) return '-' const a = scenario.assumptions.find(a => a.key === key) if (!a) return '-' const v = a.value if (typeof v === 'number') return String(v) return String(v) } const rows: SensitivityResult[] = [ { label: de ? 'Monatliches Wachstum' : 'Monthly Growth Rate', base: getVal(baseScenario, 'monthly_growth_rate') + '%', bull: getVal(bullScenario, 'monthly_growth_rate') + '%', bear: getVal(bearScenario, 'monthly_growth_rate') + '%', }, { label: de ? 'Monatliche Churn Rate' : 'Monthly Churn Rate', base: getVal(baseScenario, 'churn_rate_monthly') + '%', bull: getVal(bullScenario, 'churn_rate_monthly') + '%', bear: getVal(bearScenario, 'churn_rate_monthly') + '%', }, { label: de ? 'Startkunden' : 'Initial Customers', base: getVal(baseScenario, 'initial_customers'), bull: getVal(bullScenario, 'initial_customers'), bear: getVal(bearScenario, 'initial_customers'), }, { label: 'ARPU Mini', base: getVal(baseScenario, 'arpu_mini') + ' EUR', bull: getVal(bullScenario, 'arpu_mini') + ' EUR', bear: getVal(bearScenario, 'arpu_mini') + ' EUR', }, { label: 'ARPU Studio', base: getVal(baseScenario, 'arpu_studio') + ' EUR', bull: getVal(bullScenario, 'arpu_studio') + ' EUR', bear: getVal(bearScenario, 'arpu_studio') + ' EUR', }, { label: 'ARPU Cloud', base: getVal(baseScenario, 'arpu_cloud') + ' EUR', bull: getVal(bullScenario, 'arpu_cloud') + ' EUR', bear: getVal(bearScenario, 'arpu_cloud') + ' EUR', }, { label: 'CAC', base: getVal(baseScenario, 'cac') + ' EUR', bull: getVal(bullScenario, 'cac') + ' EUR', bear: getVal(bearScenario, 'cac') + ' EUR', }, { label: de ? 'Produktmix Mini/Studio/Cloud' : 'Product Mix Mini/Studio/Cloud', base: `${getVal(baseScenario, 'product_mix_mini')}/${getVal(baseScenario, 'product_mix_studio')}/${getVal(baseScenario, 'product_mix_cloud')}`, bull: `${getVal(bullScenario, 'product_mix_mini')}/${getVal(bullScenario, 'product_mix_studio')}/${getVal(bullScenario, 'product_mix_cloud')}`, bear: `${getVal(bearScenario, 'product_mix_mini')}/${getVal(bearScenario, 'product_mix_studio')}/${getVal(bearScenario, 'product_mix_cloud')}`, }, { label: de ? 'Marketing / Monat' : 'Marketing / Month', base: getVal(baseScenario, 'marketing_monthly') + ' EUR', bull: getVal(bullScenario, 'marketing_monthly') + ' EUR', bear: getVal(bearScenario, 'marketing_monthly') + ' EUR', }, ] // Summary KPIs from computed results const baseSummary = fm.results.get(baseScenario?.id || '')?.summary const bullSummary = fm.results.get(bullScenario?.id || '')?.summary const bearSummary = fm.results.get(bearScenario?.id || '')?.summary return (
{de ? 'Anhang' : 'Appendix'}
{i.annex.assumptions.subtitle}
| {de ? 'Annahme' : 'Assumption'} |
|
|
|
|---|---|---|---|
| {row.label} | {row.bear} | {row.base} | {row.bull} |
{s.label} Case