<?php namespace App\Libs\Composers;

use DirectoryIterator;
use App\Libs\Facades\ContentTypes;
use App\Libs\Facades\Localization;
use App\Libs\Facades\RequestContext;
use Illuminate\Support\Facades\Auth;

class AdminHeaderComposer
{

    public function compose($view)
    {
        $website = Localization::getWebsite();
        $user = Auth::guard('admin')->user();
        $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 ($user->backendRole->short_name == 'projects' && $menu_key != 'projects') {
                    continue;
                }
                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('backend.menu.view')) {
            $frontendMenus = $website->menus;
        }

        $dir = new DirectoryIterator(config_path('backoffice/generic'));
        $contentMenus = array();
        $contentTypes = ContentTypes::all();
        foreach ($contentTypes as $contentType) {
            $type = $contentType->getType();
            if ($user->hasPermission('backend.content.'.$type.'.view')) {
                if ($contentType->hasWebsite($website->id)) {
                    $group = $contentType->getGroup();

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

                    if ($user->backendRole->short_name == 'projects' && $group != 'projects') {
                        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,
            'website' => $website
        ));
    }
}
