const clamp = (n) => Math.max(0, n);
const events = [
...classes.data.map((c) => ({
id: c._id,
kind: c.eventType, // "class" or "course_session"
canceled: c.isCanceled,
title: c.name,
summary: c.description,
startsAt: c.start,
timezone: c.timezone,
location: c.isOnline ? "Online" : places.get(c.locationId)?.name ?? null,
lecturers: c.lecturerIds.map((id) => lecturers.get(id)?.name).filter(Boolean),
seatsLeft: c.capacity ? clamp(c.capacity.max - c.capacity.reserved) : null,
prices: c.pricingOptions,
url: c.publicUrl,
})),
...workshops.data.map((w) => ({
id: w._id,
kind: "workshop",
title: w.name,
summary: w.shortDescription,
startsAt: w.start,
timezone: w.timezone,
location: [w.address?.street, w.address?.city].filter(Boolean).join(", ") || null,
lecturers: w.lecturerIds.map((id) => lecturers.get(id)?.name).filter(Boolean),
seatsLeft: w.capacity ? w.capacity.available : null,
prices: w.pricingOptions,
url: w.publicUrl,
})),
].sort((a, b) => a.startsAt.localeCompare(b.startsAt));