getAllowedTransitions(), true); } /** * Get all allowed transitions from current status. * * @return array */ public function getAllowedTransitions(): array { return match ($this) { self::PENDING => [self::IN_PROGRESS, self::CANCELLED], self::IN_PROGRESS => [self::COMPLETED, self::FAILED, self::CANCELLED], self::COMPLETED => [], self::FAILED => [self::PENDING], // Allow retry self::CANCELLED => [], }; } /** * Check if this is a terminal (final) status. */ public function isTerminal(): bool { return in_array($this, [self::COMPLETED, self::FAILED, self::CANCELLED], true); } /** * Get human-readable label. */ public function label(): string { return match ($this) { self::PENDING => 'Offen', self::IN_PROGRESS => 'In Arbeit', self::COMPLETED => 'Abgeschlossen', self::FAILED => 'Fehlgeschlagen', self::CANCELLED => 'Abgebrochen', }; } /** * Get CSS class for badge styling. */ public function badgeClass(): string { return match ($this) { self::PENDING => 'pending', self::IN_PROGRESS => 'info', self::COMPLETED => 'completed', self::FAILED => 'failed', self::CANCELLED => 'warning', }; } }