Your IP : 216.73.217.77


Current Path : /home/users/unlimited/www/ultimate-ai.codeskitter.site/app/Services/Common/
Upload File :
Current File : /home/users/unlimited/www/ultimate-ai.codeskitter.site/app/Services/Common/FrontMenuService.php

<?php

namespace App\Services\Common;

use App\Extensions\MegaMenu\System\Models\MegaMenu;
use App\Helpers\Classes\MarketplaceHelper;
use App\Models\Setting;
use Illuminate\Support\Arr;

class FrontMenuService
{
    public function generate(): array
    {

        $menus = $this->menuSetting();

        if (MarketplaceHelper::isRegistered('mega-menu')) {
            $megaMenus = $this->getMegaMenu($menus);

            foreach ($menus as $key => $menu) {

                if (isset($menu['mega_menu_id']) && $menu['mega_menu_id']) {
                    $megaMenu = Arr::first($megaMenus, function ($value) use ($menu) {
                        return $value['id'] == $menu['mega_menu_id'];
                    });

                    if ($megaMenu) {
                        $menus[$key]['mega_menu'] = [
                            'id'                => $megaMenu['id'],
                            'name'              => $megaMenu['name'],
                            'number_of_columns' => $megaMenu['number_of_columns'],
                            'items'             => $megaMenu['active_items'],
                        ];
                    }
                }
            }
        }

        return $menus;
    }

    public function getMegaMenu(array $menus)
    {
        $megaMenus = array_filter($menus, function ($menu) {
            return isset($menu['mega_menu_id']) && (bool) $menu['mega_menu_id'];
        });

        $pluckMegaMenuIds = Arr::pluck($megaMenus, 'mega_menu_id');

        return MegaMenu::query()
            ->select('id', 'name', 'number_of_columns')
            ->where('status', 1)
            ->with([
                'activeItems:id,mega_menu_id,parent_id,label,description,type,icon,link,space',
                'activeItems.activeChildren:id,mega_menu_id,parent_id,label,description,type,icon,link,space',

            ])

            ->whereIn('id', $pluckMegaMenuIds)
            ->get()->toArray();
    }

    public function menuSetting(): array
    {
        $menus = Setting::getCache()->menu_options;

        $frontMenus = $menus ?: '[{"title": "Home","url": "#banner","target": false, "mega_menu_id": ""},{"title": "Features","url": "#features","target": false, "mega_menu_id": ""},{"title": "How it Works","url": "#how-it-works","target": false, "mega_menu_id": ""},{"title": "Testimonials","url": "#testimonials","target": false, "mega_menu_id": ""},{"title": "Pricing","url": "#pricing","target": false, "mega_menu_id": ""},{"title": "FAQ","url": "#faq","target": false, "mega_menu_id": ""}]';

        return json_decode($frontMenus, true, 512, JSON_THROW_ON_ERROR);
    }
}