<?php

declare(strict_types=1);

namespace Atk4\Ui;

class Breadcrumb extends Lister
{
    public $ui = 'breadcrumb';

    public $defaultTemplate = 'breadcrumb.html';

    /** @var string|null */
    public $title;

    /** @var list<array{section: string, link: string|array<0|string, string|int|false>}> */
    public $path = [];

    /** @var string */
    public $dividerClass = 'right angle icon';

    /**
     * Adds a new link that will appear on the right.
     *
     * @param string                                   $section Title of link
     * @param string|array<0|string, string|int|false> $link    Link itself
     *
     * @return $this
     */
    public function addCrumb($section = null, $link = null)
    {
        if (is_array($link)) {
            $link = $this->url($link);
        }
        $this->path[] = ['section' => $section, 'link' => $link, 'divider' => $this->dividerClass];

        return $this;
    }

    /**
     * Converts the last crumb you added into a title. This may be convenient if you add
     * crumbs conditionally and the last should remain as a title.
     *
     * @return $this
     */
    public function popTitle()
    {
        $title = array_pop($this->path);
        $this->title = $title['section'];

        return $this;
    }

    /**
     * Adds a new link that will appear on the left.
     *
     * @param string                                   $section Title of link
     * @param string|array<0|string, string|int|false> $link    Link itself
     *
     * @return $this
     */
    public function addCrumbReverse($section = null, $link = null)
    {
        array_unshift($this->path, ['section' => $section, 'link' => $link]);

        return $this;
    }

    #[\Override]
    protected function renderView(): void
    {
        $this->setSource($this->path);

        parent::renderView();

        if ($this->title !== null) {
            $this->template->append('Content', $this->title);
        }
    }
}
