<?php

// SPDX-FileCopyrightText: 2018 Icinga GmbH <https://icinga.com>
// SPDX-License-Identifier: GPL-3.0-or-later

namespace Icinga\Web\Navigation\Renderer;

/**
 * Interface for navigation renderers
 */
interface NavigationRendererInterface
{
    /**
     * CSS class for items
     *
     * @var string
     */
    const CSS_CLASS_ITEM = 'nav-item';

    /**
     * CSS class for active items
     *
     * @var string
     */
    const CSS_CLASS_ACTIVE = 'active';

    /**
     * CSS class for selected items
     *
     * @var string
     */
    const CSS_CLASS_SELECTED = 'selected';

    /**
     * CSS class for dropdown items
     *
     * @var string
     */
    const CSS_CLASS_DROPDOWN = 'dropdown-nav-item';

    /**
     * CSS class for a dropdown item's trigger
     *
     * @var string
     */
    const CSS_CLASS_DROPDOWN_TOGGLE = 'dropdown-toggle';

    /**
     * CSS class for the ul element
     *
     * @var string
     */
    const CSS_CLASS_NAV = 'nav';

    /**
     * CSS class for the ul element with dropdown layout
     *
     * @var string
     */
    const CSS_CLASS_NAV_DROPDOWN = 'dropdown-nav';

    /**
     * CSS class for the ul element with tabs layout
     *
     * @var string
     */
    const CSS_CLASS_NAV_TABS = 'tab-nav';

    /**
     * Icon for a dropdown item's trigger
     *
     * @var string
     */
    const DROPDOWN_TOGGLE_ICON = 'menu';

    /**
     * Default tag for the outer element the navigation will be wrapped with
     *
     * @var string
     */
    const OUTER_ELEMENT_TAG = 'div';

    /**
     * The heading's rank
     *
     * @var int
     */
    const HEADING_RANK = 1;

    /**
     * Set the tag for the outer element the navigation is wrapped with
     *
     * @param   string  $tag
     *
     * @return  $this
     */
    public function setElementTag($tag);

    /**
     * Return the tag for the outer element the navigation is wrapped with
     *
     * @return  string
     */
    public function getElementTag();

    /**
     * Set the CSS class to use for the outer element
     *
     * @param   string  $class
     *
     * @return  $this
     */
    public function setCssClass($class);

    /**
     * Get the CSS class used for the outer element
     *
     * @return  string
     */
    public function getCssClass();

    /**
     * Set the navigation's heading text
     *
     * @param   string  $heading
     *
     * @return  $this
     */
    public function setHeading($heading);

    /**
     * Return the navigation's heading text
     *
     * @return  string
     */
    public function getHeading();

    /**
     * Return the navigation rendered to HTML
     *
     * @return  string
     */
    public function render();
}
