<?php namespace Eae\Composers;

use DirectoryIterator;
use Eae\Backoffice\Generic\ContentType;
use ContentTypes;
use Auth;
use Config;
use RequestContext;
use Request;             
  
class AdminHeaderComposer {

    public function compose($view)
    {
        $user = Auth::backend()->user();
        $menus = Config::get('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::get();
        } 
        $dir = new DirectoryIterator(app_path('config/backoffice/generic'));
        $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
        ));
    }
}