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)}
)}
)
}