'Requested', self::PendingDispatch => 'Pending Dispatch', self::InTransit => 'In Transit', self::Delivered => 'Delivered', self::Consumed => 'Consumed', self::Cancelled => 'Cancelled', }; } public function allowedTransitions(): array { return match ($this) { self::Requested => [self::PendingDispatch, self::Cancelled], self::PendingDispatch => [self::InTransit, self::Cancelled], self::InTransit => [self::Delivered], self::Delivered => [self::Consumed], self::Consumed => [], self::Cancelled => [], }; } public function color(): string { return match ($this) { self::Requested => 'gray', self::PendingDispatch => 'yellow', self::InTransit => 'blue', self::Delivered => 'green', self::Consumed => 'emerald', self::Cancelled => 'red', }; } }