import { useEffect, useState } from 'react' import { Alert, Box, Button, Chip, CircularProgress, Typography } from '@mui/material' import { BarChart2, Building2, FileText, Lightbulb, TrendingUp } from 'lucide-react' import { marketReportService } from '../../services/marketReportService' import type { MarketReport, SignalCategory } from '../../domain/marketReport' import { SignalCard } from './SignalCard' import { BerichtDialog } from './BerichtDialog' interface Props { propertyId: string } const SECTION_CONFIG: { category: SignalCategory; label: string; icon: React.ReactNode; color: string }[] = [ { category: 'development', label: 'Entwicklungsnews', icon: , color: '#1e3a5f' }, { category: 'demand', label: 'Nachfrage 5 km', icon: , color: '#1a7a4a' }, { category: 'supply', label: 'Angebot 5 km', icon: , color: '#b45309' }, { category: 'negotiation', label: 'Verhandlungshinweise', icon: , color: '#7c3aed' }, ] export function PropertyMarketSignalsTab({ propertyId }: Props) { const [report, setReport] = useState(null) const [loading, setLoading] = useState(true) const [dialogOpen, setDialogOpen] = useState(false) useEffect(() => { let cancelled = false setLoading(true) marketReportService.getByProperty(propertyId).then(r => { if (!cancelled) { setReport(r); setLoading(false) } }) return () => { cancelled = true } }, [propertyId]) if (loading) { return ( ) } return ( Marktsignale & Standortintelligenz {report?.generatedAt && ( Generiert {new Date(report.generatedAt).toLocaleDateString('de-CH')} )} {!report ? ( Für dieses Objekt liegen noch keine KI-generierten Marktsignale vor. ) : ( SECTION_CONFIG.map(({ category, label, icon, color }) => { const signals = report.signals.filter(s => s.category === category) if (signals.length === 0) return null return ( {icon} {label} {signals.map(s => )} ) }) )} {dialogOpen && ( setDialogOpen(false)} report={report} propertyId={propertyId} /> )} ) }