<?php

declare(strict_types=1);

/*
 * This file is part of contao-weinanlieferung-bundle.
 *
 * (c) vonRotenberg
 *
 * @license commercial
 */

namespace vonRotenberg\WeinanlieferungBundle\EventListener\Backend;



use Contao\CoreBundle\Event\MenuEvent;
use Knp\Menu\Util\MenuManipulator;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\Routing\RouterInterface;
use Terminal42\ServiceAnnotationBundle\Annotation\ServiceTag;
use vonRotenberg\WeinanlieferungBundle\Controller\Backend\WeinanlieferungBookingsController;
use vonRotenberg\WeinanlieferungBundle\Controller\Backend\WeinanlieferungSlotAssistantController;

/**
 * @ServiceTag("kernel.event_listener", event="contao.backend_menu_build", priority=-255)
 */
 class BackendMenuListener
{
     protected $router;
     protected $requestStack;

     public function __construct(RouterInterface $router, RequestStack $requestStack)
     {
         $this->router = $router;
         $this->requestStack = $requestStack;
     }

     public function __invoke(MenuEvent $event): void
     {
         $factory = $event->getFactory();
         $tree = $event->getTree();
         $ref = $this->requestStack->getCurrentRequest()->attributes->get('_contao_referer_id');

         if ('mainMenu' !== $tree->getName()) {
             return;
         }

         if (($contentNode = $tree->getChild('weinanlieferung')) === null)
         {
             $contentNode = $tree->addChild('weinanlieferung');
         }

         $node = $factory
             ->createItem('booking-list')
             ->setUri($this->router->generate(WeinanlieferungBookingsController::class,['ref'=>$ref]))
             ->setLabel('Buchungsübersicht')
             ->setLinkAttribute('title', 'Übersicht aller gebuchter Anlieferungszeiten')
             ->setLinkAttribute('class', 'navigation wa-booking-list')
             ->setCurrent($this->requestStack->getCurrentRequest()->get('_controller') === WeinanlieferungBookingsController::class)
         ;

         $contentNode->addChild($node);

         $node = $factory
             ->createItem('slot-assistant')
             ->setUri($this->router->generate(WeinanlieferungSlotAssistantController::class,['ref'=>$ref]))
             ->setLabel('Slot-Assistent')
             ->setLinkAttribute('title', 'Assistent zur Massenalage von Zeitslots für Standorte')
             ->setLinkAttribute('class', 'navigation wa-slot-assistant')
             ->setCurrent($this->requestStack->getCurrentRequest()->get('_controller') === WeinanlieferungSlotAssistantController::class)
         ;

         $contentNode->addChild($node);

         $manipulator = new MenuManipulator();
         $manipulator->moveToPosition($contentNode['slot-assistant'],1);
     }
}