<?php 

namespace Sargilla\FlatLab\Services\ViewComposers;

use Sargilla\FlatLab\FlatLabMenu as MenuAdmin;
use Illuminate\View\View;

use Spatie\Menu\Laravel\Menu;
use Spatie\Menu\Link;

class MenuAdminComposer
{
    private $patron;
    private $menu;
    private $menus;

    public function __construct()
    {
        $this->menu_salida = Menu::new();
        $this->menus = MenuAdmin::raiz()->ordenar()->get();
        $this->patron = request()->decodedPath();

    }
    public function compose(View $view)
    {
        $this->buildMenu();         

        $this->menu_salida->setActive($this->patron);
  
        $this->menu_salida->each(function (Link $link) {
            if($link->isActive()){
                 $link->addClass('active');
            };
        });
      //  dd($this->menu_salida,$this->patron);
        $view->with('menuadmin', $this->menu_salida);
    }
    public function buildMenu()
    {
        $this->menu_salida->addClass('sidebar-menu')->setAttribute('id' , 'nav-accordion');
        foreach ($this->menus as $menu){
            if($menu->tieneHijos()){
                
                $activo = (strpos($this->patron, $menu->alias) !== false) ? 'active':'';

                $this->hijos = $menu->hijos->sortBy('orden');
              //  dd($this->hijos->sortBy('orden'));
                $this->menu_salida->submenuIfCan($menu->permiso,"<a href='javascript:void(0)' class='$activo' ><i class='fa $menu->icono'></i> <span>$menu->nombre<span></a>", function (Menu $menu_parcial) {
                   
                    $this->generarHijos($this->hijos, $menu_parcial);
                });
            } else {
                $this->generarLink($menu);
            };
        }
    }
    public function generarHijos($hijos, $menu)
    {
        foreach($hijos as $hijo )
        {
            $this->hijos = $hijo->hijos();

            if($this->hijos->count()){       
                $menu->submenuIfCan($hijo->permiso, "<a href='' ><i class='fa $hijo->icono'></i> <span>$hijo->nombre</span></a>", function (Menu $menu) 
                {
                    $this->generarHijos($this->hijos, $menu);
                });
            } else {
                $this->generarLink($hijo, $menu);
            }
        }

        $menu->setActiveFromRequest();

        $menu->each(function (Link $link) {
            if($link->isActive()){
                 $link->addClass('active');
            };
        });
    }

    public function generarLink($menuItem, $menu = null)
    {
        if(!$menu){
            $menu = $this->menu_salida  ;
        } 
        switch ($menuItem->tipo) {
            case 'url':
                $menu->linkIfCan($menuItem->permiso, "$menuItem->destino", "<i class='fa $menuItem->icono'></i> <span>$menuItem->nombre</span>")->addClass('sub')->addParentClass('sub-menu');
                break;
            case 'route':
                $menu->routeIfCan($menuItem->permiso, $menuItem->destino, "<i class='fa $menuItem->icono'></i> <span>$menuItem->nombre</span>")->addClass('sub')->addParentClass('sub-menu');
                break;
            case 'action':
                $menu->actionIfCan($menuItem->permiso, $menuItem->destino, "<i class='fa $menuItem->icono'></i> <span>$menuItem->nombre</span>")->addClass('sub')->addParentClass('sub-menu');
                break;
        }

    }
}
