import { useMemo } from 'react' import { Box, ToggleButton, ToggleButtonGroup, Typography } from '@mui/material' import { getKpisForRadius } from '../../domain/marketReport' import type { MarketKpis } from '../../domain/marketReport' interface Props { baseKpis: MarketKpis assetTypeLabel: string radius: number onRadiusChange: (r: number) => void } const RADII = [5, 10, 15, 20] function vacancyColor(pct: number): string { if (pct < 4) return '#1a7a4a' if (pct < 8) return '#d97706' return '#dc2626' } function vacancyLabel(pct: number): string { if (pct < 4) return 'Engpassmarkt' if (pct < 8) return 'Ausgewogen' return 'Überangebot' } function searchesColor(count: number): string { if (count >= 15) return '#1a7a4a' if (count >= 7) return '#d97706' return '#dc2626' } function searchesLabel(count: number): string { if (count >= 15) return 'Hohe Nachfrage' if (count >= 7) return 'Moderate Nachfrage' return 'Geringe Nachfrage' } function durationColor(months: number): string { if (months < 4) return '#1a7a4a' if (months < 7) return '#d97706' return '#dc2626' } function durationLabel(months: number): string { if (months < 4) return 'Schnell absorbiert' if (months < 7) return 'Moderat' return 'Träger Markt' } function ratioColor(ratio: number): string { if (ratio >= 2) return '#1a7a4a' if (ratio >= 1) return '#d97706' return '#dc2626' } function ratioLabel(ratio: number): string { if (ratio >= 2) return 'Nachfrageüberhang' if (ratio >= 1) return 'Leicht ausgeglichen' return 'Angebotsüberhang' } interface KpiCardProps { label: string value: string badge: string badgeColor: string } function KpiCard({ label, value, badge, badgeColor }: KpiCardProps) { return ( {label} {value} {badge} ) } export function MarketKpiPanel({ baseKpis, assetTypeLabel, radius, onRadiusChange }: Props) { const kpis = useMemo( () => radius === 5 ? baseKpis : getKpisForRadius(baseKpis, radius), [baseKpis, radius] ) return ( Marktumfeld — {assetTypeLabel} Vergleichbare Flächen im Umkreis v !== null && onRadiusChange(v)} size="small" sx={{ '& .MuiToggleButton-root': { py: 0.25, px: 0.875, fontSize: '0.7rem', textTransform: 'none', fontWeight: 600, border: '1px solid #e2e8f0', color: '#64748b', '&.Mui-selected': { bgcolor: '#1e3a5f', color: '#ffffff', borderColor: '#1e3a5f', '&:hover': { bgcolor: '#1e3a5f' }, }, }, }} > {RADII.map(r => ( {r} km ))} Basis: {kpis.comparableListings} vergleichbare {assetTypeLabel}-Flächen im {radius}-km-Radius · KI-gestützte Schätzung ) }