calculate method

void calculate()

Calculates the placements of the events.

Implementation

void calculate() {
  placements.clear();
  _overflowCount = 0;

  // Ensure day comparison is done using UTC for consistency
  final dayStart = DateTime.utc(day.year, day.month, day.day, 0, 0, 0);
  final dayEnd =
      dayStart.add(const Duration(days: 1)); // End of the current day in UTC

  final dayEvents = events.where((event) {
    // Check for overlap between the event and the current day (in UTC)
    return event.startDate.isBefore(dayEnd) &&
        event.endDate.isAfter(dayStart);
  }).toList();

  dayEvents.sort((a, b) => a.startDate.compareTo(b.startDate));

  if (dayEvents.length > maxEvents && maxEvents > 0) {
    final int eventsToShow = maxEvents - 1;
    _overflowCount = dayEvents.length - eventsToShow;
    for (int i = 0; i < eventsToShow; i++) {
      placements.add(
          EventPlacement(event: dayEvents[i], dayIdx: 0, span: 1, rowIdx: i));
    }
  } else {
    for (int i = 0; i < dayEvents.length; i++) {
      if (i < maxEvents) {
        placements.add(EventPlacement(
            event: dayEvents[i], dayIdx: 0, span: 1, rowIdx: i));
      }
    }
  }
}