<?php
/**
 * Ce script contient la définition de la classe SURCHARGE 'om_layout_jqueryui'.
 *
 * @package openresultat
 * @version SVN : $Id$
 */

require_once PATH_OPENMAIRIE . "om_layout_jqueryui.class.php";

/**
 * Définition de la classe SURCHARGE 'om_layout_jqueryui'.
 */
class om_layout_jqueryui extends layout_jqueryui
{

    protected function display_html_header_extrametas()
    {
        echo '<meta name="viewport" content="width=device-width, initial-scale=1" interactive-widget="resizes-content" />';
    }

    public function display_formulaire_portlet_start($params = array())
    {
        // affichage du portlet d'actions contextuelles
        echo sprintf(
            '<div id="%1$s_portlet-actions" class="ui-widget-content ui-corner-all ui-state-default">
                <input type="checkbox" name="portlet-dropdown" class="portlet-dropdown" id="%1$s_portlet_dropdown_button"> 
                <label for="%1$s_portlet_dropdown_button" class="display_portlet__label button-primary">
                    <i class="ri-more-2-line" style="font-size:16px"></i>
                     Actions
                </label>
                <ul class="%1$s_portlet-list">',
            $_GET["obj"]
        );
    }

    // {{{ STRUCTURE GENERALE DE LA PAGE
    /**
     * Affiche l'en-tête principal de la page : logo, actions, raccourcis, menu utilisateur responsive, menu principal et titre.
     * L'en-tête n'est affiché qu'une seule fois et seulement si le header HTML a déjà été généré.
     *
     * Structure affichée :
     *   - Logo (avec menu responsive si utilisateur connecté)
     *   - Actions personnelles
     *   - Raccourcis
     *   - Menu utilisateur responsive (login, collectivité, raccourcis, actions)
     *   - Menu principal
     *   - Début du contenu
     *   - Titre de la page
     */
    public function display_header()
    {
        // Affiche le header si non déjà affiché et si le header HTML existe
        if ($this->header_displayed === false && $this->html_header_displayed === true) {
            echo "<!-- ########## START HEADER ########## -->\n";
            echo '<div id="header" class="ui-widget ' . $this->get_parameter("style_header") . '">';

            // Bloc gauche : menu responsive + logo
            echo '<div class="header-left-container">';
            if (!empty($_SESSION['login'])) {
                echo '<input type="checkbox" id="menu-toggle">';
                echo '<label id="menu-toggle-label" for="menu-toggle">';
                echo '<i id="menu-toggle-icon" class="ri-menu-fold-line"></i>';
                echo '</label>';
            }
            $this->display_logo();
            echo '</div>';

            // Actions personnelles
            $this->display_actions();
            // Raccourcis
            $this->display_shortlinks();
            // Menu utilisateur responsive
            $this->display_responsive_user_menu();

            echo "</div>\n";
            echo "<!-- ########## END HEADER ########## -->\n";

            // Menu principal
            $this->display_menu();
            // Début du contenu
            $this->display_content_start();
            // Titre de la page
            $this->display_page_title();
            // Marqueur : le header est affiché
            $this->header_displayed = true;
        }
    }


    /**
     * Affiche le nom de l'utilisateur connecté dans le menu utilisateur responsive.
     * Retourne un élément <li> contenant le login de la session courante.
     *
     * @return string HTML de l'élément <li> avec le login utilisateur
     */
    public function display_action_login_responsive()
    {
        return sprintf(
            '<li class="action-login">%s</li>',
            $_SESSION['login']
        );
    }

    /**
     * Affiche le nom de la collectivité dans le menu utilisateur responsive.
     * Si la clé "ville" existe dans le paramètre "collectivite",
     * la fonction retourne un élément <li> contenant le nom de la ville.
     *
     * @return string HTML de l'élément <li> ou rien si non défini
     */
    public function display_action_collectivite_responsive()
    {
        $collectivite = $this->get_parameter("collectivite");
        if (isset($collectivite["ville"])) {
            return sprintf(
                '<li class="action-collectivite">%s</li>',
                $collectivite["ville"]
            );
        }
        return "";
    }

    /**
     * Génère un lien HTML pour le menu utilisateur responsive.
     * Les paramètres permettent de personnaliser l'adresse, l'id, la classe CSS, la cible, le titre et la description du lien.
     *
     * @param array $params Tableau associatif contenant les propriétés du lien :
     *   - href : adresse du lien (obligatoire)
     *   - id : identifiant HTML (optionnel)
     *   - class : classe(s) CSS (optionnel)
     *   - target : cible du lien (optionnel)
     *   - title : texte affiché dans le lien (obligatoire)
     *   - description : info-bulle (optionnel)
     * @return string HTML du lien ou chaîne vide si href absent
     */
    public function display_link_responsive($params)
    {
        $title = isset($params['description']) ? $params['description'] : "";
        $class = isset($params['class']) ? $params['class'] : "";
        $target = isset($params['target']) ? $params['target'] : "";
        $id = isset($params['id']) ? $params['id'] : "";

        if (isset($params['href'])) {
            return sprintf(
                '<a href="%s" id="%s" class="%s" target="%s" title="%s">%s</a>',
                $params['href'],
                $id,
                $class,
                $target,
                $title,
                $params['title']
            );
        }
        return "";
    }


    /**
     * Génère la liste des liens utilisateur (raccourcis ou actions personnelles) pour le menu responsive.
     *
     * @param string $type        Type de liens à afficher (ex : 'raccourcis', 'actions_personnelles').
     * @param string $type_class  Classe CSS à utiliser pour le type de liens (optionnel).
     * @return string             HTML des éléments <li> contenant les liens.
     */
    public function display_header_user_links($type, $type_class = "")
    {
        $links = "";
        if ($type_class === "") {
            $type_class = $type;
        }

        foreach ($this->get_parameter($type) as $key => $value) {
            $class = isset($value['class']) ? $value['class'] : "";
            $links .= sprintf(
                '<li class="%s-list-elem user-%s">%s</li>',
                $type_class,
                $class,
                $this->display_link_responsive($value)
            );
        }
        return $links;
    }


    /**
     * Affiche le menu utilisateur responsive dans l'en-tête.
     * Ce menu inclut les informations de connexion, la collectivité,
     * les raccourcis et les actions personnelles de l'utilisateur.
     * Le menu n'est affiché que si des actions personnelles sont définies.
     */
    public function display_responsive_user_menu()
    {
        if (count($this->get_parameter("actions_personnelles")) == 0) {
            return;
        }

        echo sprintf(
            '<div id="user-menu-container">
                <input type="checkbox" id="user-menu-toggle" hidden>
                <label for="user-menu-toggle" id="user-menu-button">
                    <i class="ri-user-3-fill"></i>
                </label>
                <div id="user-menu">
                    <ul class="user-menu-info">
                        %s
                        %s
                    </ul>
                    <ul class="user-menu-actions">
                        %s
                        %s
                    </ul>
                </div>
            </div>',
            $this->display_action_login_responsive(),
            $this->display_action_collectivite_responsive(),
            $this->display_header_user_links("raccourcis", "shortlinks"),
            $this->display_header_user_links("actions_personnelles")
        );
    }

}
