Warning: session_start(): Session cannot be started after headers have already been sent in /home/tvrreohg/public_html/manga.php on line 13
 Plan::orderBy('sort_order')->get()]); } public function create() { return view('admin.plans.form', ['plan' => new Plan]); } public function store(Request $request) { Plan::create($this->validated($request)); return redirect()->route('admin.plans.index')->with('success', 'Package created.'); } public function edit(Plan $plan) { return view('admin.plans.form', compact('plan')); } public function update(Request $request, Plan $plan) { $plan->update($this->validated($request, $plan)); return redirect()->route('admin.plans.index')->with('success', 'Package updated.'); } public function destroy(Plan $plan) { $plan->update(['is_active' => false]); return back()->with('success', 'Package archived.'); } private function validated(Request $request, ?Plan $plan = null): array { $data = $request->validate([ 'name' => ['required', 'string', 'max:100'], 'slug' => ['nullable', 'string', 'max:120', Rule::unique('plans')->ignore($plan)], 'description' => ['nullable', 'string', 'max:1000'], 'price' => ['required', 'numeric', 'min:0', 'max:999999'], 'currency' => ['required', 'string', 'size:3'], 'interval' => ['required', Rule::in(['one_time', 'month', 'year'])], 'features' => ['nullable', 'string', 'max:5000'], 'case_limit' => ['nullable', 'integer', 'min:1'], 'ai_request_limit' => ['nullable', 'integer', 'min:1'], 'stripe_price_id' => ['nullable', 'string', 'max:150'], 'sort_order' => ['nullable', 'integer', 'min:0'], ]); return [ ...$data, 'slug' => ($data['slug'] ?? null) ?: Str::slug($data['name']).'-'.Str::lower(Str::random(4)), 'amount_cents' => (int) round($data['price'] * 100), 'currency' => strtolower($data['currency']), 'features' => collect(preg_split('/\r\n|\r|\n/', $data['features'] ?? ''))->map(fn ($feature) => trim($feature))->filter()->values()->all(), 'is_active' => $request->boolean('is_active'), 'is_featured' => $request->boolean('is_featured'), 'sort_order' => $data['sort_order'] ?? 0, ]; } }