<?php

namespace App\Libs\Services;

use App\Models\GenericBackoffice\Menu;
use App\Models\GenericBackoffice\Entry;

class MenuService {

    public function findBySlug(string $slug) {
        $query = Menu::where('slug', $slug)
            ->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');
                },
            ]);

        return $query->first();
    }
}
