<?php

namespace App\EventSubscriber;

use App\Entity\Menu;
use Doctrine\ORM\EntityManagerInterface;
use KevinPapst\AdminLTEBundle\Event\KnpMenuEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

class KnpMenuBuilderSubscriber implements EventSubscriberInterface
{
    private $em;

    public function __construct(EntityManagerInterface $em)
    {
        $this->em = $em;
    }


    public static function getSubscribedEvents(): array
    {
        return [
            KnpMenuEvent::class => ['onSetupMenu', 100],
        ];
    }
    
    public function onSetupMenu(KnpMenuEvent $event)
    {
        $menu = $event->getMenu();
        $menu->setChildrenAttribute('class', 'nav nav-pills nav-sidebar flex-column');
        $menu->setChildrenAttribute('data-widget', 'treeview');
        $menu->setChildrenAttribute('role', 'menu');
        $menu->setChildrenAttribute('data-accordion', 'false');

        $items = $this->em->getRepository(Menu::class)->findBy(
            ['parent' => null], 
            ['position' => 'ASC']
        );

        foreach ($items as $item) {
            $menu->addChild($item->getId(), [
                'label' => $item->getName(),
                'route' => $item->getRoute()
                ])
                ->setAttribute('icon', $item->getIcon())
                ->setChildrenAttribute('class', 'nav nav-treeview');

            $children = $this->em->getRepository(Menu::class)->findBy(
                ['parent' => $item->getId()], 
                ['position' => 'ASC']
            );
            foreach ($children as $child) {
                $parameter['id'] = 0;
                $menu[$item->getId()]->addChild($child->getName(), [
                    'route' => $child->getRoute(),
                    //'routeParameters' => $child->getParameter() ? $parameter : null
                ]);
            }
        }
        return $menu;
        
        /*$menu->addChild('blogId', [
            'route' => 'item_symfony_route',
            'label' => 'Blog',
            'childOptions' => $event->getChildOptions()
        ])->setLabelAttribute('icon', 'fas fa-tachometer-alt');
        
        $menu->getChild('blogId')->addChild('ChildOneItemId', [
            'route' => 'child_1_route',
            'label' => 'ChildOneDisplayName',
            'childOptions' => $event->getChildOptions()
        ])->setLabelAttribute('icon', 'fas fa-rss-square');
        
        $menu->getChild('blogId')->addChild('ChildTwoItemId', [
            'route' => 'child_2_route',
            'label' => 'ChildTwoDisplayName',
            'childOptions' => $event->getChildOptions()
        ]);*/
    }
}