<?php

namespace Src\Common\Pages;

use Src\Common\Interfaces\Pages\Sidebar\IMenu;

/**
 * Абстрактный базовый класс для всех страниц приложения
 * Определяет общую структуру и поведение страниц
 */
abstract class Page
{
    /**
     * Версия CSS файлов (для кэш-бастинга)
     * @var string
     */
    const CSS_VERSION = '7.0';

    /**
     * Версия JS файлов (для кэш-бастинга) 
     * @var string
     */
    const JS_VERSION = '7.0';

    /**
     * Сайдбар страницы
     * @var IMenu
     */
    protected IMenu $sidebar;

    /**
     * Возвращает список CSS файлов для страницы
     * @return array Массив путей к CSS файлам
     */
    public abstract function getCssStack(): array;

    /**
     * Возвращает список JS файлов для страницы
     * @return array Массив путей к JS файлам
     */
    public abstract function getJsStack(): array;

    /**
     * Возвращает общие настройки JS для всех страниц
     * @return array Ассоциативный массив настроек
     */
    public function getCommonJsSettings(): array
    {
        return [];
    }

    /**
     * Возвращает специфичные настройки JS для конкретной страницы
     * @return array Ассоциативный массив настроек
     */
    public abstract function getJsSettings(): array;

    /**
     * Возвращает заголовок страницы
     * @return string Заголовок страницы
     */
    public abstract function getTitle(): string;

    /**
     * Устанавливает сайдбар для страницы
     * @param IMenu $menu Объект меню сайдбара
     */
    public function setSidebar(IMenu $menu): void
    {
        $this->sidebar = $menu;
    }

    /**
     * Возвращает сайдбар страницы
     * @return IMenu Объект меню сайдбара
     */
    public function getSidebar(): IMenu
    {
        return $this->sidebar;
    }
}
