<?php

namespace Src\Common\Pages\Sidebar;

use Src\Common\Interfaces\Pages\Sidebar\IMenu;
use Src\Common\Interfaces\Pages\Sidebar\IItem;
use Src\Common\Interfaces\Pages\Sidebar\IFactory as ISidebarFactory;

/**
 * Класс основного меню сайдбара
 * Реализует коллекцию пунктов меню и их подпунктов
 */
class Menu implements IMenu
{
    /**
     * Массив пунктов меню
     * @var IItem[] Коллекция объектов пунктов меню
     */
    protected $menuItems = [];

    /**
     * Фабрика для создания элементов меню
     * @var ISidebarFactory
     */
    protected $sidebarFactory;

    /**
     * Устанавливает фабрику элементов сайдбара
     * @param ISidebarFactory $factory Объект фабрики элементов
     */
    public function setSidebarFactory(ISidebarFactory $factory): void
    {
        $this->sidebarFactory = $factory;
    }

    /**
     * Загружает данные меню из конфигурации
     * @param array $itemsData Массив данных пунктов меню:
     *     Каждый элемент должен содержать:
     *     - title (string) - заголовок пункта
     *     - url (string) - ссылка пункта
     *     - subItems (array) - массив подпунктов (опционально)
     */
    public function load(array $itemsData): void
    {
        foreach ($itemsData as $itemData) {
            $menuItem = $this->sidebarFactory->createItem();
            $menuItem->load($itemData);
            $this->menuItems[] = $menuItem;
        }
    }

    /**
     * Возвращает все пункты меню
     * @return IItem[] Массив объектов пунктов меню
     */
    public function getMenuItems(): array
    {
        return $this->menuItems;
    }
}
