<?php

namespace App\Http\Controllers\Api;

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

use App\Http\Resources\MenusCollection;
use App\Models\GenericBackoffice\Entry;
use Illuminate\Http\Resources\Json\JsonResource;
use App\Http\Resources\Footer as FooterResource;

class MenuController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return JsonResource
     */
    public function index()
    {
        $menus = Menu::with([
            'menuItems' => function ($query) {
                $query->select('menu_items.*')
                    ->with(['children' => function ($query) {
                        $query->orderBy('menu_items.position')
                            ->with(['children' => function ($query) {
                                $query->orderBy('menu_items.position');
                            }]);
                    }]);
                $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([
            'socialMedias',
        ])->orderBy('id')->first();

        $footerData = new FooterResource($footer);

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