<?php

namespace App\Http\Controllers\Api;

use App\Models\GenericBackoffice\Menu;
use App\Models\Footer;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

use App\Http\Resources\Footer as FooterResource;
use App\Http\Resources\MenusCollection;
use App\Facades\Services\BackendUserService;
use App\Models\GenericBackoffice\Entry;

class MenuController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $user = BackendUserService::getLoggedUser();
        $menus = Menu::with([
            'menuItems' => function ($query) use ($user) {
                $query->select('menu_items.*')
                    ->with(['children' => function ($query) {
                        $query->orderBy('menu_items.position')
                            ->with(['children' => function ($query) {
                                $query->orderBy('menu_items.position');
                            }]);
                    }]);
                if (!$user) {
                    $query->leftJoin('website_objects', function ($join) {
                        $join->on('menu_items.entry_id', '=', 'website_objects.object_id')
                            ->where('website_objects.object_type', Entry::class);
                    })
                        ->where(function ($query) {
                            $query->whereNull('website_objects.status')->orWhere('website_objects.status', 'published');
                        });
                };
                $query->whereNull('menu_items.parent_id')
                      ->orderBy('menu_items.position');
            },
        ])->get();

        $footer = Footer::with([
            'footerLinks' => function ($query) {
                $query->select('*')
                    ->orderBy('position');
            },
            'socialMedias',
        ])->isActive()->orderBy('id')->first();

        $footerData = new FooterResource($footer);

        return new MenusCollection($menus, $footerData);
    }
}
