import { Box, Chip, Typography } from '@mui/material'
import { Building2, ExternalLink } from 'lucide-react'
import type { Property } from '../../domain/property'
import type { ExtractedContact } from '../../domain/futureSignal'
import { ObjectDeepLink } from '../team'
import { CONTACT_ICONS } from './marketLeadHelpers'
import { DS_BG, DS_BRAND, DS_SLATE, DS_TEXT } from '../../lib/ds'
/**
* Bausteine der Signal-Detailansicht auf der Nora-Seite.
*
* Ausgezogen aus `MarketIntelligence.tsx` — die Seite hält jetzt nur noch
* Reiter, Auswahl und Rahmen.
*/
// ── Left pane list item ──────────────────────────────────────────────────────
// ── Contact row ──────────────────────────────────────────────────────────────
/**
* Extrahierte Kontaktdaten (Runde 4, §7.3).
*
* Ohne Konfidenzstufe und ohne Farbpunkt: gezeigt wird nur noch, was klar
* belegbar ist — siehe `confirmableContacts`. Ein Wert mit dem Hinweis
* «spekulativ» hilft niemandem; entweder man kann ihn anschreiben oder nicht.
*/
function ContactRow({ contact }: { contact: ExtractedContact }) {
const icon = CONTACT_ICONS[contact.type]
const isClickable = contact.type === 'WEBSITE' || contact.type === 'LINKEDIN' || contact.type === 'EMAIL'
const href = contact.type === 'EMAIL' ? `mailto:${contact.value}` : contact.type === 'WEBSITE' || contact.type === 'LINKEDIN' ? `https://${contact.value.replace(/^https?:\/\//, '')}` : undefined
return (
{icon}
{isClickable && href ? (
{contact.value}
) : (
{contact.value}
)}
{contact.label && (
{contact.label}
)}
)
}
// ── Objektzeile ──────────────────────────────────────────────────────────────
/**
* Ein passendes Portfolioobjekt zu einem Signal.
*
* Der Anschreiben-Entwurf und die Reminder-Aktion sind mit Runde 4 entfallen
* (§7.3), die Mehrfachauswahl mit Runde 8: sie diente allein dazu, Objekte an
* die Exposé-Erstellung weiterzureichen, und diese Funktion gibt es bei Livia
* nicht mehr. Eine Auswahl ohne Ziel wäre ein Bedienelement, das nichts
* auslöst — schlimmer als keines.
*
* Geblieben ist, was Nora für die Entscheidung braucht: welches Objekt, wo,
* wie gross, zu welchem Preis und wie gut die Fläche passt.
*/
function SignalPropertyRow({
p, fit,
}: {
p: Property
fit: number | null
}) {
return (
{p.location.city} · {p.areaSqm.toLocaleString('de-CH')} m² · CHF {p.rentPricePerSqm}/m²/J
{fit !== null && (
)}
)
}
export { ContactRow, SignalPropertyRow }