<?php

namespace App\Services\Backoffice;

use App\Facades\Backoffice\BackendUserService;
use App\Facades\Backoffice\ContentTypes;
use App\Models\Backoffice\Menu;

class BackofficeMenuService
{
    public function getMenu()
    {
        $user = BackendUserService::getLoggedUser();

        if (!$user) {
            return [];
        }

        $config = config('backoffice.menu');

        //Frontend Menus admin
        $frontendMenus = [];
        if ($user->hasPermission('cms.manage')) {
            $frontendMenus = Menu::all();
        }
        $contentMenus = [];
        if ($config['auto'] && $user->hasPermission('cms.manage')) {
            $contentTypes = ContentTypes::all();
            foreach ($contentTypes as $contentType) {
                $type = $contentType->getType();
                $group = $contentType->getGroup();

                if ($group == "none") {
                    continue;
                }

                if (!array_key_exists($group, $contentMenus)) {
                    $contentMenus[$group] = [
                        'label' => ucfirst($group),
                        'items' => []
                    ];
                }

                $contentMenus[$group]['items'][$type] = [
                    'label' => ucfirst($contentType->getLabel()),
                    'link' => url('admin/content/list/' . $type)
                ];
            }

            ksort($contentMenus);

            foreach ($contentMenus as $key => &$value) {
                uasort($value['items'], function ($firstItem, $secondItem) {
                    if ($firstItem['label'] == $secondItem['label']) {
                        return 0;
                    }

                    return ($firstItem['label'] < $secondItem['label']) ? -1 : 1;
                });
            }
        }

        $customMenus = [];
        if (!empty($config['custom_menus'])) {
            foreach ($config['custom_menus'] as $key => $item) {
                if (!empty($item['permission']) && !$user->hasPermission($item['permission'])) {
                    continue;
                }

                $menuItems = [];
                if (!empty($item['items'])) {
                    foreach ($item['items'] as $subKey => $subItem) {
                        if (!empty($subItem['permission']) && !$user->hasPermission($subItem['permission'])) {
                            continue;
                        }

                        $menuItems[$subKey] = [
                            'label' => $subItem['label'],
                            'link' => $subItem['link']
                        ];
                    }
                }

                if (!empty($menuItems)) {
                    $customMenus[$key] = [
                        'label' => $item['label'],
                        'items' => $menuItems
                    ];
                }
            }
        }

        $frontendMenuItems = [];
        if (!empty($frontendMenus)) {
            foreach ($frontendMenus as $menu) {
                $frontendMenuItems[$menu->slug] = [
                    'label' => $menu->name,
                    'link' => '/admin/menu/edit/' . $menu->id
                ];
            }
        }

        $menus = array_merge($contentMenus, $customMenus);
        if (!empty($frontendMenuItems)) {
            $menus['menus'] = [
                'label' => 'Menus',
                'items' => $frontendMenuItems
            ];
        }

        return $menus;
    }
}
