import { Box, Chip, Typography } from '@mui/material' import { Plug2, FileSpreadsheet, Upload, Globe, Rss, Database, FileText, PenLine, Bot, } from 'lucide-react' import type { LucideIcon } from 'lucide-react' import type { DataSource } from '../../domain/dataSource' import { DATA_SOURCE_TYPE_LABELS } from '../../domain/dataSource' import { SourceHealthBadge } from './SourceHealthBadge' import { TermsStatusBadge } from './TermsStatusBadge' import { ReliabilityScorePanel } from './ReliabilityScorePanel' const TYPE_ICONS: Record = { API_CONNECTOR: Plug2, CSV_IMPORT: FileSpreadsheet, MANUAL_UPLOAD: Upload, PUBLIC_WEB_SOURCE: Globe, PARTNER_FEED: Rss, INTERNAL_PORTFOLIO_EXPORT: Database, CONTRACT_METADATA_IMPORT: FileText, ANALYST_ENTRY: PenLine, FUTURE_CRAWLER_STUB: Bot, } function formatDate(iso?: string): string { if (!iso) return '—' return new Date(iso).toLocaleString('de-CH', { day: '2-digit', month: '2-digit', year: '2-digit', hour: '2-digit', minute: '2-digit', }) } interface SourceCardProps { source: DataSource selected: boolean onClick: () => void } export function SourceCard({ source, selected, onClick }: SourceCardProps) { const Icon = TYPE_ICONS[source.sourceType] ?? Database return ( {source.name} {DATA_SOURCE_TYPE_LABELS[source.sourceType]} {formatDate(source.lastRunAt)} {source.regionCoverage.length > 0 && ( {source.regionCoverage.slice(0, 3).map((r) => ( ))} {source.regionCoverage.length > 3 && ( +{source.regionCoverage.length - 3} )} )} ) }