<?php

/**
 * @package     Joomla.Administrator
 * @subpackage  mod_menu
 *
 * @copyright   (C) 2017 Open Source Matters, Inc. <https://www.joomla.org>
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

defined('_JEXEC') or die;

use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Router\Route;
use Joomla\CMS\Uri\Uri;

/**
 * =========================================================================================================
 * IMPORTANT: The scope of this layout file is the `var  \Joomla\Module\Menu\Administrator\Menu\CssMenu` object
 * and NOT the module context.
 * =========================================================================================================
 */
/** @var  \Joomla\Module\Menu\Administrator\Menu\CssMenu  $this */
$class         = 'item';
$currentParams = $current->getParams();

// Build the CSS class suffix
if (!$this->enabled) {
    $class .= ' disabled';
} elseif ($current->type == 'separator') {
    $class = $current->title ? 'menuitem-group' : 'divider';
} elseif ($current->hasChildren()) {
    $class .= ' parent';

    if (!empty($current->active)) {
        $class .= ' mm-active';
    }
}

$class .= ' item-level-' . (int) $current->level;

// Set the correct aria role and print the item
if ($current->type == 'separator') {
    echo '<li class="' . $class . '" role="presentation">';
} else {
    echo '<li class="' . $class . '">';
}

// Print a link if it exists
$linkClass  = [];
$iconClass  = '';
$itemIconClass = '';
$itemImage  = '';

if ($current->hasChildren()) {
    $linkClass[] = 'has-arrow';
} else {
    $linkClass[] = 'no-dropdown';

    if (!empty($current->active)) {
        $linkClass[] = 'mm-active';
    }
}

// Implode out $linkClass for rendering
$linkClass = ' class="' . implode(' ', $linkClass) . '" ';

// Add aria-current for the active menu item
$ariaCurrent = (!empty($current->active) && !$current->hasChildren()) ? ' aria-current="page"' : '';

// Get the menu link
$link = $current->link;

// Get the menu image class
$itemIconClass = $currentParams->get('menu_icon');

// Get the menu image
$itemImage = $currentParams->get('menu_image');

// Get the menu icon
$icon      = $this->getIconClass($current);
$iconClass = ($icon != '' && $current->level == 1) ? '<span class="' . $icon . '" aria-hidden="true"></span>' : '';
$ajax      = !empty($current->ajaxbadge) ? '<span class="menu-badge"><span class="icon-spin icon-spinner mt-1 system-counter" data-url="' . $current->ajaxbadge . '"></span></span>' : '';
$iconImage = $current->icon;
$homeImage = '';

if ($iconClass === '' && $itemIconClass) {
    $iconClass = '<span class="' . $itemIconClass . '" aria-hidden="true"></span>';
}

if ($iconImage) {
    if (substr($iconImage, 0, 6) == 'class:' && substr($iconImage, 6) == 'icon-home') {
        $iconImage = '<span class="home-image icon-home" aria-hidden="true"></span>';
        $iconImage .= '<span class="visually-hidden">' . Text::_('JDEFAULT') . '</span>';
    } elseif (substr($iconImage, 0, 6) == 'image:') {
        $iconImage = '&nbsp;<span class="badge">' . substr($iconImage, 6) . '</span>';
    } else {
        $iconImage = '';
    }
}

$itemImage = (empty($itemIconClass) && $itemImage) ? '&nbsp;<img src="' . Uri::root() . $itemImage . '" alt="">&nbsp;' : '';

// If the item image is not set, the item title would not have margin. Here we add it.
if ($icon == '' && $iconClass == '' && $current->level == 1 && $current->target == '') {
    $iconClass = '<span aria-hidden="true" class="icon-fw"></span>';
}

if ($link != '' && $current->target != '') {
    echo '<a' . $linkClass . $ariaCurrent . ' href="' . $link . '" target="' . $current->target . '">'
        . $iconClass
        . '<span class="sidebar-item-title">' . $itemImage . Text::_($current->title) . '</span>' . $ajax . '</a>';
} elseif ($link != '' && $current->type !== 'separator') {
    echo '<a' . $linkClass . $ariaCurrent . ' href="' . $link . '" aria-label="' . Text::_($current->title) . '">'
        . $iconClass
        . '<span class="sidebar-item-title">' . $itemImage . Text::_($current->title) . '</span>' . $iconImage . '</a>';
} elseif ($current->title != '' && $current->type !== 'separator') {
    echo '<a' . $linkClass . $ariaCurrent . ' href="#">'
        . $iconClass
        . '<span class="sidebar-item-title">' . $itemImage . Text::_($current->title) . '</span>' . $ajax . '</a>';
} elseif ($current->title != '' && $current->type === 'separator') {
    echo '<span class="sidebar-item-title">' . Text::_($current->title) . '</span>' . $ajax;
} else {
    echo '<span>' . Text::_($current->title) . '</span>' . $ajax;
}

if ($currentParams->get('menu-quicktask') && (int) $this->params->get('shownew', 1) === 1) {
    $params = $current->getParams();
    $user = $this->application->getIdentity();
    $link = $params->get('menu-quicktask');
    $icon = $params->get('menu-quicktask-icon', 'plus');
    $title = $params->get('menu-quicktask-title', 'MOD_MENU_QUICKTASK_NEW');
    $permission = $params->get('menu-quicktask-permission');
    $scope = $current->scope !== 'default' ? $current->scope : null;

    if (!$permission || $user->authorise($permission, $scope)) {
        echo '<span class="menu-quicktask"><a href="' . $link . '">';
        echo '<span class="icon-' . $icon . '" title="' . htmlentities(Text::_($title)) . '" aria-hidden="true"></span>';
        echo '<span class="visually-hidden">' . Text::_($title) . '</span>';
        echo '</a></span>';
    }
}

if (!empty($current->dashboard)) {
    $titleDashboard = Text::sprintf('MOD_MENU_DASHBOARD_LINK', Text::_($current->title));

    // Prepare the Dashboard icon. We use our own icon, not Fontawesome
    $pathDashboard = 'media/templates/administrator/atum/images/icons/dashboard.svg';
    $attrDashboard = [
        'loading'     => 'eager',
        'decoding'    => 'async',
        'aria-hidden' => 'true',
        'class'       => 'atum-dashboard',
        'height'      => '18',
    ];

    $iconDashboard = HTMLHelper::_('image', $pathDashboard, '', $attrDashboard, false, 0);

    echo '<span class="menu-dashboard"><a href="'
        . Route::_('index.php?option=com_cpanel&view=cpanel&dashboard=' . $current->dashboard) . '" '
        . 'title="' . $titleDashboard . '">'
        . '<span>' . $iconDashboard . '</span>'
        . '<span class="visually-hidden">' . $titleDashboard . '</span>'
        . '</a></span>';
}

// Recurse through children if they exist
if ($this->enabled && $current->hasChildren()) {
    $mmShow = !empty($current->active) ? ' mm-show' : '';

    if ($current->level > 1) {
        $id = $current->id ? ' id="menu-' . strtolower($current->id) . '"' : '';

        echo '<ul' . $id . ' class="mm-collapse collapse-level-' . $current->level . $mmShow . '">' . "\n";
    } else {
        echo '<ul id="collapse' . $this->getCounter() . '" class="collapse-level-1 mm-collapse' . $mmShow . '">' . "\n";
    }

    // WARNING: Do not use direct 'include' or 'require' as it is important to isolate the scope for each call
    $this->renderSubmenu(__FILE__, $current);

    echo "</ul>\n";
}

echo "</li>\n";
