$this->nextCascadePoint($event, $user, $due, $now), EventState::Today => $now->startOfHour()->addHours(2), EventState::Overdue => $now->startOfDay()->addDays(2), default => $now, }; } private function nextCascadePoint(Event $event, User $user, Due $due, CarbonImmutable $now): CarbonImmutable { $today = $now->startOfDay(); foreach (Cascade::points($this->due->fireStart($event, $user), $due->day) as $point) { if ($point->gt($today)) { return $point; } } return $this->due->todayStart($due, $user); } }