<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Models\DocumentationCategory;
use Illuminate\Http\Request;
use Inertia\Inertia;

/**
 * @method middleware(\Closure $param)
 */
class DocumentationCategoryController extends Controller
{
    public function __construct()
    {
        $this->middleware(function ($request, $next) {
            if (auth()->user()?->role !== 'admin') {
                abort(403);
            }

            return $next($request);
        })->only(['store', 'update', 'destroy']);
    }

    /**
     * Display a listing of the resource.
     */
    public function index()
    {
        $categories = DocumentationCategory::whereNull('parent_id')
            ->with('childrenRecursive')
            ->orderBy('name')
            ->get();

        return Inertia::render('documentation/category/Index', [
            'categories' => $categories,
        ]);
    }

    /**
     * Show the form for creating a new resource.
     */
    public function create()
    {
        $categories = DocumentationCategory::orderBy('name')->get();

        return Inertia::render('documentation/category/Create', [
            'categories' => $categories,
        ]);
    }

    /**
     * Store a newly created resource in storage.
     */
    public function store(Request $request)
    {
        $data = $request->validate([
            'name' => 'required|string|max:255',
            'parent_id' => 'nullable|exists:documentation_categories,id',
        ]);

        DocumentationCategory::create($data);

        return redirect()
            ->route('documentation.index')
            ->with('success', 'Категория создана');
    }

    /**
     * Display the specified resource.
     */
    public function show(string $id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     */
    public function edit(string $id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     */
    public function update(Request $request, string $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     */
    public function destroy(DocumentationCategory $category)
    {
        // защита от удаления если есть дети
        if ($category->children()->exists()) {
            return back()->withErrors([
                'message' => 'Нельзя удалить категорию с подкатегориями'
            ]);
        }

        // защита от удаления если есть документы
        if ($category->documents()->exists()) {
            return back()->withErrors([
                'message' => 'Нельзя удалить категорию с документами'
            ]);
        }

        $category->delete();

        return back()->with('success', 'Категория удалена');
    }
}
