<?php

namespace App\View\Composers;

use App\Facades\ContentTypes;
use App\Facades\RequestContext;
use App\Facades\Services\BackendUserService;
use App\Models\GenericBackoffice\Menu;
use DirectoryIterator;

class AdminHeaderComposer
{

    public function compose($view)
    {
        $user = BackendUserService::getLoggedUser();
        $menus = config('backoffice.menus');

        $selected_menu = RequestContext::get('selected_menu');
        $selected_option = RequestContext::get('selected_menu_option');

        if (!$selected_menu) {

            $current_path = request()->path();
            foreach ($menus as $menu_key => $menu) {
                if (isset($menu['options'])) {
                    foreach ($menu['options'] as $option_key => $option) {

                        if (!empty($selected_option)) {
                            if ($selected_option == $option_key) {
                                $selected_menu = $menu_key;
                                break;
                            }
                        } elseif ($option['link_to'] === $current_path) {
                            $selected_option = $option_key;
                            $selected_menu = $menu_key;
                            break;
                        }
                    }

                    if ($selected_menu) {
                        break;
                    }
                } else {
                    if ($menu['link_to'] === $current_path) {
                        $selected_menu = $menu_key;
                        break;
                    }
                }
            }
        }

        //Frontend Menus admin
        $frontendMenus = array();
        if ($user->hasPermission('cms.manage')) {
            $frontendMenus = Menu::all();
        }

        $contentMenus = array();
        if ($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] = array();
                }

                $contentMenus[$group][$type] = $contentType->getLabel();
            }
        }

        ksort($contentMenus);

        foreach ($contentMenus as $key => &$value) {
            uasort($value, function ($firstItem, $secondItem) {
                if (ucfirst($firstItem) == ucfirst($secondItem)) {
                    return 0;
                }

                return (ucfirst($firstItem) < ucfirst($secondItem)) ? -1 : 1;
            });
        }
        $view->with(array(
            'user' => $user,
            'menus' => $menus,
            'selected_menu' => $selected_menu,
            'selected_option' => $selected_option,
            'frontend_menus' => $frontendMenus,
            'contentMenus' => $contentMenus
        ));
    }
}
