import { useState } from 'react' import { Drawer, Box, Typography, IconButton, Chip, Divider, TextField, Button, Switch, FormControlLabel, Tooltip, } from '@mui/material' import { X, MapPin, Calendar, DollarSign, Eye, Activity } from 'lucide-react' import { useReminderStore } from '../../stores/reminderStore' import { useReminder, useCompleteReminder, useDismissReminder, useSnoozeReminder } from '../../hooks/useReminders' import { ReminderPriorityBadge } from './ReminderPriorityBadge' import { ReminderTypeBadge } from './ReminderTypeBadge' import { ReminderDaysIndicator } from './ReminderDaysIndicator' import { ReminderStatus, ShadowMarketRisk } from '../../domain/reminder' import type { ReminderActivity } from '../../domain/reminder' const SHADOW_RISK_COLOR: Record = { NONE: '#64748b', LOW: '#16a34a', MEDIUM: '#ca8a04', HIGH: '#dc2626', } const SHADOW_RISK_LABEL: Record = { NONE: 'Kein Risiko', LOW: 'Niedrig', MEDIUM: 'Mittel', HIGH: 'Hoch', } const STATUS_CHIP_COLOR: Record = { ACTIVE: 'info', SNOOZED: 'warning', COMPLETED: 'success', DISMISSED: 'default', } const STATUS_LABEL: Record = { ACTIVE: 'Aktiv', SNOOZED: 'Schlummernd', COMPLETED: 'Erledigt', DISMISSED: 'Verworfen', } const ACTION_LABEL: Record = { CREATED: 'Erstellt', SNOOZED: 'Zurückgestellt', COMPLETED: 'Erledigt', DISMISSED: 'Verworfen', NOTED: 'Notiz', } function SectionTitle({ icon, children }: { icon: React.ReactNode; children: React.ReactNode }) { return ( {icon} {children} ) } function DateRow({ label, value }: { label: string; value?: string }) { if (!value) return null return ( {label} {new Date(value).toLocaleDateString('de-CH')} ) } function ActivityEntry({ entry }: { entry: ReminderActivity }) { return ( {ACTION_LABEL[entry.action]} {entry.by} · {new Date(entry.at).toLocaleDateString('de-CH')} {entry.note && ( {entry.note} )} ) } export function ReminderDetailDrawer() { const { selectedId, drawerOpen, setDrawerOpen, setSelectedId } = useReminderStore() const { data: reminder } = useReminder(selectedId ?? '') const complete = useCompleteReminder() const dismiss = useDismissReminder() const snooze = useSnoozeReminder() const [noteValue, setNoteValue] = useState('') const [snoozeDate, setSnoozeDate] = useState('') function handleClose() { setDrawerOpen(false) setSelectedId(null) } const isNew = !selectedId return ( {/* Header */} {isNew ? ( Neuer Reminder ) : reminder ? ( <> ) : null} {/* Scrollable body */} {isNew && ( Neue Reminder-Erstellung noch nicht implementiert. )} {reminder && ( <> {/* 2. Property */} }>Objekt {reminder.propertyTitle} {reminder.propertyCity}{reminder.propertyDistrict ? ` · ${reminder.propertyDistrict}` : ''} Mieter: {reminder.tenantName} Fläche: {reminder.areaSqm.toLocaleString('de-CH')} m² {/* 3. Dates */} }>Daten & Fristen {reminder.snoozedUntil && ( )} {/* 4. Financials */} }>Finanzen Miete/m² {reminder.currency} {reminder.currentRentPerSqm.toLocaleString('de-CH')} / Monat Total / Monat {reminder.currency} {(reminder.currentRentPerSqm * reminder.areaSqm).toLocaleString('de-CH')} {/* 5. Pre-Market */} }>Pre-Market Risiko {SHADOW_RISK_LABEL[reminder.shadowMarketRisk]} } label={ Pre-Market aktiviert } /> {/* 6. Note */} Notiz setNoteValue(e.target.value)} placeholder="Notiz hinzufügen…" sx={{ '& .MuiInputBase-root': { fontSize: '0.8125rem' } }} /> {/* Actions */} {(reminder.status === ReminderStatus.ACTIVE || reminder.status === ReminderStatus.SNOOZED) && ( <> Aktionen setSnoozeDate(e.target.value)} sx={{ flex: 1, '& .MuiInputBase-root': { fontSize: '0.8125rem' } }} /> )} {/* 7. Activity */} }>Aktivitätslog {[...reminder.activity].reverse().map((entry, i) => ( ))} )} ) }