import { Alert, Box, Chip, Divider, Typography } from '@mui/material' import { Zap } from 'lucide-react' import type { UnifiedMatchResult } from '../../domain/unifiedResult' import { UnifiedResultCard } from './UnifiedResultCard' import { SCORE_THEME } from '../shared/scoreTheme' interface Props { results: UnifiedMatchResult[] view?: 'list' | 'grid' } const TIER_CONFIG = [ { key: 'gold' as const, label: 'Top Matches', sublabel: '90–100 Punkte', filter: (r: UnifiedMatchResult) => r.matchScore >= 90, }, { key: 'silver' as const, label: 'Starke Matches', sublabel: '80–89 Punkte', filter: (r: UnifiedMatchResult) => r.matchScore >= 80 && r.matchScore < 90, }, { key: 'bronze' as const, label: 'Weitere Treffer', sublabel: 'unter 80 Punkte', filter: (r: UnifiedMatchResult) => r.matchScore < 80, }, ] interface TierHeaderProps { label: string sublabel: string tierKey: 'gold' | 'silver' | 'bronze' count: number isFirst: boolean } function TierHeader({ label, sublabel, tierKey, count, isFirst }: TierHeaderProps) { const theme = SCORE_THEME[tierKey] return ( {label} {sublabel} ) } function SchattenmarktSectionHeader({ count }: { count: number }) { return ( Schattenmarkt } sx={{ mb: 2, bgcolor: '#faf5ff', border: '1px solid #e9d5ff', color: '#4c1d95', '& .MuiAlert-icon': { color: '#7c3aed' }, }} > Was sind Schattenmarkt-Signale? Die KI hat aus öffentlichen Quellen (Stelleninseraten, Pressemeldungen, Baubewilligungen etc.) Hinweise gefunden, dass in Ihrer Zielregion in absehbarer Zeit Flächen frei werden könnten. Dies sind keine bestätigten Angebote — aber frühzeitige Hinweise, die Sie im Auge behalten sollten. Klicken Sie auf Details für Quellen und die vollständige KI-Analyse. ) } export function UnifiedResultFeed({ results, view = 'list' }: Props) { const realResults = results.filter(r => r.resultType !== 'FUTURE_AVAILABILITY') const signalResults = results.filter(r => r.resultType === 'FUTURE_AVAILABILITY') const tiers = TIER_CONFIG.map(t => ({ ...t, items: realResults.filter(t.filter) })) .filter(t => t.items.length > 0) function renderCards(items: UnifiedMatchResult[]) { return view === 'grid' ? ( {items.map(result => ( ))} ) : ( {items.map(result => ( ))} ) } return ( {/* Real properties — scored tiers */} {tiers.map((tier, idx) => ( {renderCards(tier.items)} ))} {/* Schattenmarkt signals — dedicated section */} {signalResults.length > 0 && ( {renderCards(signalResults)} )} ) }