<?php

namespace App\Http\Controllers\Admin;

/*
 * ServiceAdminController — CRUD услуг в административной панели.
 * Маршруты: admin.services.*
 * Slug генерируется автоматически из title при создании,
 * при редактировании не меняется (стабильные URL на детальных страницах).
 */

use App\Http\Controllers\Controller;
use App\Models\Service;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cache;
use Illuminate\View\View;

class ServiceAdminController extends Controller
{
    public function index(): View
    {
        $services = Service::orderBy('sort_order')->orderBy('title')->get();

        return view('admin.services.index', compact('services'));
    }

    public function create(): View
    {
        return view('admin.services.form', ['service' => new Service]);
    }

    public function store(Request $request): RedirectResponse
    {
        $data = $this->validated($request);
        $data['slug'] = Service::generateSlug($data['title']);

        Service::create($data);
        $this->forgetCache();

        return redirect()->route('admin.services.index')
            ->with('success', 'Услуга «' . $data['title'] . '» создана.');
    }

    public function edit(Service $service): View
    {
        return view('admin.services.form', compact('service'));
    }

    public function update(Request $request, Service $service): RedirectResponse
    {
        $data = $this->validated($request, $service->id);

        $service->update($data);
        $this->forgetCache();

        return redirect()->route('admin.services.index')
            ->with('success', 'Услуга «' . $service->title . '» обновлена.');
    }

    public function destroy(Service $service): RedirectResponse
    {
        $title = $service->title;
        $service->delete();
        $this->forgetCache();

        return redirect()->route('admin.services.index')
            ->with('success', 'Услуга «' . $title . '» удалена.');
    }

    // ── Приватные хелперы ─────────────────────────────────────────────────

    private function validated(Request $request, ?int $exceptId = null): array
    {
        $rules = [
            'title'       => 'required|string|max:255',
            'icon'        => 'nullable|string|max:10',
            'excerpt'     => 'nullable|string|max:500',
            'description' => 'nullable|string',
            'tags'        => 'nullable|array',
            'tags.*'      => 'integer',
            'sort_order'  => 'nullable|integer|min:0',
            'is_active'   => 'nullable|boolean',
        ];

        $raw = $request->validate($rules);

        // tags — plain array integer ID из справочника dict_values
        $raw['tags']       = array_values(array_map('intval', array_filter($raw['tags'] ?? [])));
        $raw['sort_order'] = (int) ($raw['sort_order'] ?? 0);
        $raw['is_active']  = $request->boolean('is_active');

        return $raw;
    }

    private function forgetCache(): void
    {
        // Сбрасываем кеш секций страниц, где используются блоки services_grid
        foreach (['home', 'services', 'contacts'] as $slug) {
            Cache::forget('page_sections.' . $slug);
        }
    }
}
