'BetiX Casino', 'site_tagline' => 'Play. Win. Repeat.', 'primary_color' => '#df006a', 'logo_url' => '', 'favicon_url' => '', 'maintenance_mode' => false, 'registration_open' => true, 'min_deposit_usd' => 10, 'max_deposit_usd' => 50000, 'min_withdrawal_usd' => 20, 'max_withdrawal_usd' => 100000, 'max_bet_usd' => 5000, 'house_edge_percent' => 1.0, 'footer_text' => '', 'support_email' => '', 'terms_url' => '/terms', 'privacy_url' => '/privacy', 'currency_symbol' => 'BTX', ]; public function show() { $saved = AppSetting::get(self::KEY, []); $settings = array_merge($this->defaults, is_array($saved) ? $saved : []); return Inertia::render('Admin/SiteSettings', [ 'settings' => $settings, ]); } public function save(Request $request) { // Normalize empty strings to null so URL/email validation doesn't fail on blank fields foreach (['logo_url', 'favicon_url', 'terms_url', 'privacy_url', 'support_email', 'site_tagline', 'footer_text'] as $field) { if ($request->input($field) === '') { $request->merge([$field => null]); } } $data = $request->validate([ 'site_name' => 'required|string|max:100', 'site_tagline' => 'nullable|string|max:200', 'primary_color' => 'required|regex:/^#[0-9a-fA-F]{6}$/', 'logo_url' => 'nullable|url|max:500', 'favicon_url' => 'nullable|url|max:500', 'maintenance_mode' => 'boolean', 'registration_open' => 'boolean', 'min_deposit_usd' => 'required|numeric|min:0', 'max_deposit_usd' => 'required|numeric|min:0', 'min_withdrawal_usd' => 'required|numeric|min:0', 'max_withdrawal_usd' => 'required|numeric|min:0', 'max_bet_usd' => 'required|numeric|min:0', 'house_edge_percent' => 'required|numeric|min:0|max:100', 'footer_text' => 'nullable|string|max:1000', 'support_email' => 'nullable|email|max:200', 'terms_url' => 'nullable|string|max:500', 'privacy_url' => 'nullable|string|max:500', 'currency_symbol' => 'required|string|max:10', ]); AppSetting::put(self::KEY, $data); return back()->with('success', 'Site settings saved.'); } }