'boolean', 'pdf_viewer_show_download' => 'boolean', 'giorni_giacenza_da_assegnare' => 'integer', 'giorni_giacenza_prioritari' => 'integer', 'giorni_per_smarrito' => 'integer', 'home_limit_list' => 'integer', 'assignment_link_ttl_hours' => 'integer', 'audit_retention_days' => 'integer', ]; } protected static function booted(): void { static::saved(function (): void { static::$cachedInstance = null; }); static::deleted(function (): void { static::$cachedInstance = null; }); } /** * Get the singleton settings instance (first row). */ public static function instance(): static { if (static::$cachedInstance instanceof static) { return static::$cachedInstance; } static::$cachedInstance = static::firstOrCreate([], [ 'giorni_giacenza_da_assegnare' => 120, 'giorni_giacenza_prioritari' => 180, 'giorni_per_smarrito' => 120, 'home_limit_list' => 10, 'assignment_link_ttl_hours' => 1, 'audit_retention_days' => 730, ]); return static::$cachedInstance; } public static function isSetupComplete(): bool { $setting = static::first(); return $setting && $setting->setup_completed; } public static function getValue(string $key, mixed $default = null): mixed { return static::instance()->{$key} ?? $default; } }