'use client' import { Calendar, FileQuestion, Users, Clock, ChevronRight } from 'lucide-react' import { UpcomingEvent, EventType } from '@/lib/companion/types' import { EVENT_TYPE_CONFIG } from '@/lib/companion/constants' interface EventsCardProps { events: UpcomingEvent[] onEventClick?: (event: UpcomingEvent) => void loading?: boolean maxItems?: number } const iconMap: Record> = { FileQuestion, Users, Clock, Calendar, } function getEventIcon(type: EventType) { const config = EVENT_TYPE_CONFIG[type] const Icon = iconMap[config.icon] || Calendar return { Icon, ...config } } function formatEventDate(dateStr: string, inDays: number): string { if (inDays === 0) return 'Heute' if (inDays === 1) return 'Morgen' if (inDays < 7) return `In ${inDays} Tagen` const date = new Date(dateStr) return date.toLocaleDateString('de-DE', { weekday: 'short', day: 'numeric', month: 'short', }) } interface EventItemProps { event: UpcomingEvent onClick?: () => void } function EventItem({ event, onClick }: EventItemProps) { const { Icon, color, bg } = getEventIcon(event.type) const isUrgent = event.inDays <= 2 return ( ) } export function EventsCard({ events, onEventClick, loading, maxItems = 5, }: EventsCardProps) { const displayEvents = events.slice(0, maxItems) if (loading) { return (

Termine

{[1, 2, 3].map((i) => (
))}
) } if (events.length === 0) { return (

Termine

Keine anstehenden Termine

) } return (

Termine

{events.length} Termin{events.length !== 1 ? 'e' : ''}
{displayEvents.map((event) => ( onEventClick?.(event)} /> ))}
{events.length > maxItems && ( )}
) } /** * Compact inline version for header/toolbar */ export function EventsInline({ events }: { events: UpcomingEvent[] }) { const nextEvent = events[0] if (!nextEvent) { return (
Keine Termine
) } const { Icon, color } = getEventIcon(nextEvent.type) const isUrgent = nextEvent.inDays <= 2 return (
{nextEvent.title} - {formatEventDate(nextEvent.date, nextEvent.inDays)}
) }