value] ?? $table[Tier::Einzel->value]); } public function extraPmCreditsFor(User $user): int { return $this->extraPmCredits($user->currentTier()); } /** * Boost-Preis (Credits) für eine Laufzeit in Tagen. */ public function boostCredits(int $days): int { $table = config('credits.boost', []); if (! isset($table[$days])) { throw new \InvalidArgumentException("Unbekannte Boost-Laufzeit: {$days} Tage."); } return (int) $table[$days]; } /** * Verfügbare Boost-Laufzeiten als [Tage => Credits], aufsteigend. * * @return array */ public function boostOptions(): array { $table = config('credits.boost', []); ksort($table); return $table; } public function proofPdfCredits(): int { return (int) config('credits.proof_pdf'); } public function depublishCredits(): int { return (int) config('credits.depublish'); } /** * Freie Prüfungen pro Monat für das Tier (Prüfkontingent §4.3). */ public function reviewFreeQuota(Tier $tier): int { $table = config('credits.review.free_per_month', []); return (int) ($table[$tier->value] ?? $table[Tier::Einzel->value]); } public function reviewDailyLimit(): int { return (int) config('credits.review.daily_limit'); } public function reviewOverflowCost(): int { return (int) config('credits.review.overflow_cost'); } }