getAllowedTransitions(), true); } /** * Get all allowed transitions from current status. * * @return array */ public function getAllowedTransitions(): array { return match ($this) { self::DRAFT => [self::GENERATING], self::GENERATING => [self::CRITIQUE, self::DRAFT], self::CRITIQUE => [self::REVISION, self::VALIDATE], self::REVISION => [self::CRITIQUE], self::VALIDATE => [self::APPROVE, self::REVISION], self::APPROVE => [self::PUBLISHED, self::REVISION], self::PUBLISHED => [], }; } /** * Check if this is a terminal (final) status. */ public function isTerminal(): bool { return $this === self::PUBLISHED; } /** * Check if content can be edited in this status. */ public function isEditable(): bool { return in_array($this, [self::DRAFT, self::REVISION], true); } /** * Get human-readable label. */ public function label(): string { return match ($this) { self::DRAFT => 'Entwurf', self::GENERATING => 'Wird generiert', self::CRITIQUE => 'In Kritik', self::REVISION => 'In Überarbeitung', self::VALIDATE => 'Zur Prüfung', self::APPROVE => 'Genehmigt', self::PUBLISHED => 'Veröffentlicht', }; } /** * Get CSS class for badge styling. */ public function badgeClass(): string { return match ($this) { self::DRAFT => 'draft', self::GENERATING => 'pending', self::CRITIQUE => 'warning', self::REVISION => 'warning', self::VALIDATE => 'info', self::APPROVE => 'success', self::PUBLISHED => 'completed', }; } }