<?php

namespace Src\Common\Pages\Sidebar;

use Src\Common\Interfaces\Pages\Sidebar\ISubItem;
use Src\Common\Interfaces\Pages\Sidebar\IFactory as ISidebarFactory;

/**
 * Класс реализующий подпункт меню сайдбара
 * 
 * Отвечает за хранение и представление данных подпункта меню,
 * включая заголовок, ссылку и дополнительную метку (badge)
 */
class SubItem implements ISubItem
{
    /**
     * Заголовок подпункта меню
     * @var string|null
     */
    protected $title;

    /**
     * Ссылка подпункта меню
     * @var string|null
     */
    protected $url;

    /**
     * Дополнительная метка/бейдж подпункта
     * @var string|null
     */
    protected $bage;

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

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

    /**
     * Загружает данные подпункта меню
     * @param array $subItemData Массив данных подпункта:
     *     - title (string) - заголовок
     *     - url (string) - ссылка
     *     - bage (string) - дополнительная метка
     */
    public function load(array $subItemData): void
    {
        $this->title = $subItemData['title'] ?? null;
        $this->url = $subItemData['url'] ?? null;
        $this->bage = $subItemData['bage'] ?? null;
    }

    /**
     * Возвращает заголовок подпункта
     * @return string|null
     */
    public function getTitle(): ?string
    {
        return $this->title;
    }

    /**
     * Возвращает ссылку подпункта
     * @return string|null
     */
    public function getUrl(): ?string
    {
        return $this->url;
    }

    /**
     * Возвращает метку подпункта
     * @return string|null
     */
    public function getBage(): ?string
    {
        return $this->bage;
    }
}
