import { Box, Chip, Divider, LinearProgress, Paper, Typography } from '@mui/material' import { AlertTriangle, Calendar, CheckCircle2, Clock, ShieldCheck, Sparkles, TrendingUp, Zap, } from 'lucide-react' import type { Match } from '../../domain/match' import type { FutureSignal } from '../../domain/futureSignal' import { SIGNAL_TYPE_LABELS, SIGNAL_ACTION, SOURCE_META } from './futureAvailabilityConstants' import { CREDIBILITY_META, SENSITIVITY_META, RISK_META, ageLabel } from './futureAvailabilityContextUtils' import { SignalSourcesSection } from './SignalSourcesSection' import { DS_TEXT, DS_BG, DS_SURFACE, DS_PRE_MARKET, DS_MARKET_SIGNAL, DS_BORDER } from '../../lib/ds' interface Props { match: Match signal: FutureSignal | null } export function FutureAvailabilityContextPanel({ match: _match, signal }: Props) { if (!signal) return null const sourceMeta = SOURCE_META[signal.source.type] ?? null const credMeta = CREDIBILITY_META[signal.source.credibility] ?? null const sensitiveMeta = SENSITIVITY_META[signal.sensitivityLevel] ?? SENSITIVITY_META.PUBLIC const riskMeta = signal.riskLevel ? (RISK_META[signal.riskLevel] ?? null) : null const probPct = Math.round(signal.probability * 100) const isVerifiedContract = signal.isVerified && signal.source.type === 'LEASE_CONTRACT' const action = signal.signalType ? (SIGNAL_ACTION[signal.signalType] ?? null) : null const allSourceUrls = [ ...(signal.source.url ? [signal.source.url] : []), ...(signal.evidence?.sourceUrls ?? []), ] const probBarColor = probPct >= 70 ? DS_TEXT.success : probPct >= 50 ? DS_TEXT.warning : DS_TEXT.error return ( {/* ── Header ── */} Future Availability Signal {signal.isVerified && ( Verifiziert )} {ageLabel(signal.createdAt)} {signal.title && ( {signal.title} )} {/* ── 1. KI-Zusammenfassung ── */} {signal.aiSummary && ( KI-Zusammenfassung {signal.aiSummary} )} {/* ── 2. Strategische Einschätzung ── */} {signal.strategicInterpretation && ( Strategische Einschätzung {signal.strategicInterpretation} )} {/* ── 3. Handlungsempfehlung ── */} {action && ( Empfohlene Aktion {action.label} )} {/* ── 4. Signal-Kenndaten ── */} Signal-Kenndaten Eintretenswahrscheinlichkeit {probPct}% {signal.signalType && ( Signaltyp )} Zeithorizont ~{signal.timeHorizonMonths} Monate {signal.areaSqmEstimate && ( Flächenschätzung ~{signal.areaSqmEstimate.toLocaleString('de-CH')} m² )} {riskMeta && ( Risikoniveau {riskMeta.label} )} {/* ── 5. Erkannte Marktindikatoren ── */} {signal.marketIndicators && signal.marketIndicators.length > 0 && ( Erkannte Marktindikatoren {signal.marketIndicators.map((indicator, i) => ( {indicator} ))} )} {/* ── 6. Transparenz ── */} {((signal.confirmedFacts && signal.confirmedFacts.length > 0) || (signal.unconfirmedFacts && signal.unconfirmedFacts.length > 0)) && ( Transparenz — Was ist gesichert? {(signal.confirmedFacts ?? []).map((fact, i) => ( {fact} ))} {(signal.unconfirmedFacts ?? []).map((fact, i) => ( {fact} ))} )} {/* ── 7. Quellen & Belege ── */} {/* ── Footer ── */} Vertraulichkeit: {signal.verifiedBy && ( <> Verifiziert von: {signal.verifiedBy} )} {signal.disclaimer} ) }