'Fixed Limit', self::PERCENTAGE => 'Percentage', self::UNLIMITED => 'Unlimited', }; } public static function values(): array { return array_column(self::cases(), 'value'); } public function getAllocationValueRules(): array { return match($this) { self::FIXED_LIMIT => ['required', 'numeric', 'min:0'], self::PERCENTAGE => ['required', 'numeric', 'min:0.01', 'max:100'], self::UNLIMITED => ['nullable'], }; } public function formatValue(?float $value): string { return match($this) { self::FIXED_LIMIT => '$' . number_format($value ?? 0, 2), self::PERCENTAGE => number_format($value ?? 0, 2) . '%', self::UNLIMITED => 'All remaining', }; } }