import { UITree } from '../types.js';
export function buildCalendarViewTree(data: {
calendar: any;
events: any[];
startDate: string;
endDate: string;
}): UITree {
const calendar = data.calendar || {};
const events = data.events || [];
// Map GHL events to CalendarView component events
const calEvents = events.map((evt: any) => ({
date: evt.startTime || evt.start || evt.date || '',
title: evt.title || evt.name || 'Event',
time: evt.startTime
? new Date(evt.startTime).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })
: undefined,
type: evt.appointmentStatus === 'confirmed' ? 'meeting' as const : 'event' as const,
color: evt.appointmentStatus === 'cancelled' ? '#dc2626' : undefined,
}));
const start = new Date(data.startDate);
const confirmedCount = events.filter((e: any) => e.appointmentStatus === 'confirmed').length;
const cancelledCount = events.filter((e: any) => e.appointmentStatus === 'cancelled').length;
return {
root: 'page',
elements: {
page: {
key: 'page',
type: 'PageHeader',
props: {
title: calendar.name || 'Calendar',
subtitle: `${events.length} events`,
gradient: true,
stats: [
{ label: 'Total Events', value: String(events.length) },
{ label: 'Confirmed', value: String(confirmedCount) },
{ label: 'Cancelled', value: String(cancelledCount) },
],
},
children: ['calendar'],
},
calendar: {
key: 'calendar',
type: 'CalendarView',
props: {
year: start.getFullYear(),
month: start.getMonth() + 1,
events: calEvents,
highlightToday: true,
},
},
},
};
}