/* Hallmark · pre-emit critique: P5 H5 E5 S5 R5 V5 */ /* Hallmark · component: calendar-page · genre: editorial · theme: Atelier (Dark & Light) · studied-DNA: https://inihaus.de */ import React, { useState } from 'react'; import { Calendar as CalendarIcon, ChevronLeft, ChevronRight, ArrowRight, MapPin, Clock, Layers } from 'lucide-react'; export default function CalendarPage({ events, onSelectEvent, branding }) { const [currentDate, setCurrentDate] = useState(new Date()); const [selectedCalendarEvent, setSelectedCalendarEvent] = useState(null); const year = currentDate.getFullYear(); const month = currentDate.getMonth(); const monthNames = [ 'JANUAR', 'FEBRUAR', 'MÄRZ', 'APRIL', 'MAI', 'JUNI', 'JULI', 'AUGUST', 'SEPTEMBER', 'OKTOBER', 'NOVEMBER', 'DEZEMBER' ]; const prevMonth = () => setCurrentDate(new Date(year, month - 1, 1)); const nextMonth = () => setCurrentDate(new Date(year, month + 1, 1)); const todayMonth = () => setCurrentDate(new Date()); const firstDayOfMonth = new Date(year, month, 1).getDay(); const startOffset = (firstDayOfMonth === 0 ? 6 : firstDayOfMonth - 1); const daysInMonth = new Date(year, month + 1, 0).getDate(); const formatDateString = (day) => { const mStr = String(month + 1).padStart(2, '0'); const dStr = String(day).padStart(2, '0'); return `${year}-${mStr}-${dStr}`; }; const getEventsForDay = (day) => { const dateStr = formatDateString(day); return events.filter((evt) => dateStr >= evt.start_date && dateStr <= evt.end_date); }; const primaryColor = branding?.primary_color || 'var(--brand-primary)'; return (
{/* Calendar Masthead Bar */}

{monthNames[month]} {year}

— INITIATIVE E.V. TERMIN- & SCHICHTÜBERSICHT —

{/* Calendar Grid Container */}
{/* Days Header */}
MO
DI
MI
DO
FR
SA
SO
{/* Days Cells */}
{Array.from({ length: startOffset }).map((_, i) => (
))} {Array.from({ length: daysInMonth }).map((_, i) => { const dayNum = i + 1; const dayEvents = getEventsForDay(dayNum); const isToday = new Date().getFullYear() === year && new Date().getMonth() === month && new Date().getDate() === dayNum; return (
{dayNum} {dayEvents.length > 0 && ( {dayEvents.length} {dayEvents.length === 1 ? 'Event' : 'Events'} )}
{dayEvents.map((evt) => { const isSelected = selectedCalendarEvent?.id === evt.id; return ( ); })}
); })}
{/* Selected Event Detail Drawer */} {selectedCalendarEvent && (
{new Date(selectedCalendarEvent.start_date).toLocaleDateString('de-DE')} — {new Date(selectedCalendarEvent.end_date).toLocaleDateString('de-DE')} {selectedCalendarEvent.location && ( {selectedCalendarEvent.location} )}

{selectedCalendarEvent.title}

{selectedCalendarEvent.description && (

{selectedCalendarEvent.description}

)}
)}
); }