<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Models\Secteur;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;
use Illuminate\View\View;

class SecteurController extends Controller
{
    public function index(): View
    {
        return view('admin.secteurs.index', [
            'secteurs' => Secteur::query()->ordered()->simplePaginate(30),
        ]);
    }

    public function create(): View
    {
        return view('admin.secteurs.create', [
            'secteur' => new Secteur(['is_published' => true]),
        ]);
    }

    public function store(Request $request): RedirectResponse
    {
        $data = $this->validated($request);
        $data['is_published'] = $request->boolean('is_published');
        $data['slug'] = isset($data['slug']) && trim((string) $data['slug']) !== '' ? $data['slug'] : null;

        Secteur::query()->create($data);

        return redirect()->route('admin.secteurs.index')->with('ok', 'Secteur cree.');
    }

    public function edit(Secteur $secteur): View
    {
        return view('admin.secteurs.edit', ['secteur' => $secteur]);
    }

    public function update(Request $request, Secteur $secteur): RedirectResponse
    {
        $data = $this->validated($request, $secteur->id);
        $data['is_published'] = $request->boolean('is_published');
        $data['slug'] = isset($data['slug']) && trim((string) $data['slug']) !== '' ? $data['slug'] : null;

        $secteur->update($data);

        return redirect()->route('admin.secteurs.index')->with('ok', 'Secteur mis a jour.');
    }

    public function destroy(Secteur $secteur): RedirectResponse
    {
        $secteur->delete();

        return redirect()->route('admin.secteurs.index')->with('ok', 'Secteur supprime.');
    }

    /**
     * @return array<string, mixed>
     */
    private function validated(Request $request, ?int $id = null): array
    {
        return $request->validate([
            'nom' => ['required', 'string', 'max:255'],
            'slug' => ['nullable', 'string', 'max:255', Rule::unique('secteurs', 'slug')->ignore($id)],
            'description' => ['nullable', 'string'],
            'contenu' => ['nullable', 'string'],
            'meta_title' => ['nullable', 'string', 'max:255'],
            'meta_description' => ['nullable', 'string', 'max:512'],
        ]);
    }
}
