<?php

namespace App\Http\Controllers\Backoffice;

use App\Facades\Backoffice\BackendUserService;
use App\Facades\Backoffice\ContentTypes;
use App\Http\Controllers\Controller;
use App\Http\Requests\Backoffice\Menu\UpdateMenuRequest;
use App\Models\Backoffice\Menu;
use App\Facades\Backoffice\BackofficeService;
use App\Http\Resources\Backoffice\MenuResource;
use Exception;
use Illuminate\Support\Facades\Cache;
use Inertia\Inertia;
use Inertia\Response;

class MenuController extends Controller
{
    public function getEdit(int $menuId): Response
    {
        $menu = Menu::with(['menuItems' => function ($query) {
            $query->with(['menuItems', 'languages'])
                ->whereNull('parent_id')
                ->orderBy('position');
        }])->where('id', $menuId)->first();

        return Inertia::render('Backoffice/Menus/EditMenu', [
            'menuData' => new MenuResource($menu),
            'menuErrors' => session('menu_errors', []),
        ]);
    }

    public function postEdit(UpdateMenuRequest $request, int $menuId): Response
    {
        $menu = Menu::findOrFail($menuId);
        $data = $request->validated();

        try {
            BackofficeService::saveMenu($menu, $data['menuStructure'], $data['toDelete'] ?? []);
            Cache::forget('menus');
            $menu = Menu::with(['menuItems' => function ($query) {
                $query->with(['menuItems', 'languages'])
                    ->whereNull('parent_id')
                    ->orderBy('position', 'asc');
            }])->where('id', $menuId)->first();

            return Inertia::render('Backoffice/Menus/EditMenu', [
                'menuData' => new MenuResource($menu),
                'menuErrors' => [],
                'success' => true,
                'message' => __('backend.save_success')
            ]);
        } catch (Exception $e) {
            return Inertia::render('Backoffice/Menus/EditMenu', [
                'menuData' => new MenuResource($menu),
                'menuErrors' => ['general' => $e->getMessage()],
                'success' => false,
                'message' => $e->getMessage()
            ]);
        }
    }
}
