import { useState } from 'react' import { Box, Chip, Drawer, Typography } from '@mui/material' import { useFutureSignals } from '../../hooks/useFutureSignals' import { FutureSignalCard, FutureSignalFilterBar, FutureSignalDetailPanel, FutureSignalEmptyState, DEFAULT_SIGNAL_FILTERS, } from '../../components/future-signals' import { AddToShortlistDialog } from '../../components/shortlist' import type { SignalFilterState } from '../../components/future-signals' import type { FutureSignal } from '../../domain/futureSignal' function applyFilters(signals: FutureSignal[], f: SignalFilterState): FutureSignal[] { return signals.filter(s => { if (f.signalType && s.signalType !== f.signalType) return false if (f.minConfidence > 0 && s.confidenceScore < f.minConfidence) return false if (f.sensitivityLevel && s.sensitivityLevel !== f.sensitivityLevel) return false if (f.reviewStatus) { const rs = s.reviewStatus ?? 'UNREVIEWED' if (rs !== f.reviewStatus) return false } if (f.timeHorizon === 'short' && s.timeHorizonMonths > 6) return false if (f.timeHorizon === 'medium' && (s.timeHorizonMonths <= 6 || s.timeHorizonMonths > 12)) return false if (f.timeHorizon === 'long' && s.timeHorizonMonths <= 12) return false return true }) } export default function FutureAvailability() { const { data: signals = [], isLoading } = useFutureSignals() const [filters, setFilters] = useState(DEFAULT_SIGNAL_FILTERS) const [selectedSignal, setSelectedSignal] = useState(null) const filtered = applyFilters(signals, filters) const needsReviewCount = signals.filter(s => !s.reviewStatus || s.reviewStatus === 'UNREVIEWED').length const highConfCount = signals.filter(s => s.confidenceScore >= 0.75).length const confidentialCount = signals.filter(s => s.sensitivityLevel === 'CONFIDENTIAL').length function handleSelect(signal: FutureSignal) { setSelectedSignal(prev => prev?.id === signal.id ? null : signal) } return ( {/* Header */} Zukunftssignale Probabilistische Markt- und Verfügbarkeitssignale 0 ? '#fef3c7' : '#f1f5f9', color: needsReviewCount > 0 ? '#d97706' : '#475569', fontWeight: needsReviewCount > 0 ? 600 : 400 }} /> {confidentialCount > 0 && ( )} {/* Filter bar */} {/* Signal list — always full width */} {isLoading ? ( {[0, 1, 2, 3].map(i => ( ))} ) : filtered.length === 0 ? ( ) : ( {filtered.map(signal => ( ))} )} {/* Detail drawer */} setSelectedSignal(null)} slotProps={{ paper: { sx: { width: 650, boxShadow: '-4px 0 24px rgba(0,0,0,0.10)' } } }} > {selectedSignal && ( setSelectedSignal(null)} /> )} ) }