<ui:composition xmlns="http://www.w3.org/1999/xhtml"
                xmlns:h="http://xmlns.jcp.org/jsf/html"
                xmlns:f="http://xmlns.jcp.org/jsf/core"
                xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
                xmlns:p="http://primefaces.org/ui"
                xmlns:fr="http://primefaces.org/freya"
                xmlns:c="http://xmlns.jcp.org/jsp/jstl/core">

    <!--
        Composant réutilisable: Bouton Action Utilisateur (WOU/DRY Pattern)
        
        Auteur: Lions User Manager
        Version: 1.0.0
        Description: Bouton générique pour actions utilisateur
        
        Paramètres:
        - value: String (requis) - Texte du bouton
        - icon: String (optionnel) - Classe d'icône PrimeIcons
        - hasAction: Boolean (défaut: false) - Indique si une action est fournie
        - action: MethodExpression (optionnel) - Action à exécuter (requis si hasAction=true)
        - hasOutcome: Boolean (défaut: false) - Indique si un outcome est fourni
        - outcome: String (optionnel) - Page de redirection (requis si hasOutcome=true)
        - onclick: String (optionnel) - Code JavaScript à exécuter au clic
        - severity: String (défaut: "primary") - Severity: "primary", "success", "warning", "danger", "info", "secondary"
        - size: String (défaut: "normal") - Taille: "small", "normal", "large"
        - disabled: Boolean (défaut: false) - Désactiver le bouton
        - update: String (optionnel) - Composants à mettre à jour
        - process: String (défaut: "@this") - Composants à traiter
        - styleClass: String (optionnel) - Classes CSS supplémentaires
        
        Exemples d'utilisation:
        
        1. Bouton simple:
        <ui:include src="/templates/components/shared/buttons/button-user-action.xhtml">
            <ui:param name="value" value="Créer Utilisateur" />
            <ui:param name="icon" value="pi-user-plus" />
            <ui:param name="action" value="#{userBean.createUser}" />
        </ui:include>
        
        2. Bouton avec redirection:
        <ui:include src="/templates/components/shared/buttons/button-user-action.xhtml">
            <ui:param name="value" value="Voir Profil" />
            <ui:param name="icon" value="pi-eye" />
            <ui:param name="outcome" value="/pages/user-manager/users/profile" />
        </ui:include>
    -->
    
    <!-- Valeurs par défaut simplifiées (fr:commandButton gère severity/size nativement) -->
    <c:set var="severity" value="#{empty severity ? 'primary' : severity}" />
    <c:set var="size" value="#{empty size ? 'normal' : size}" />
    <c:set var="disabled" value="#{empty disabled ? false : disabled}" />
    <c:set var="process" value="#{empty process ? '@this' : process}" />
    <c:set var="hasAction" value="#{empty hasAction ? false : hasAction}" />
    <c:set var="hasOutcome" value="#{empty hasOutcome ? false : hasOutcome}" />
    
    <c:choose>
        <c:when test="#{hasAction}">
            <fr:commandButton
                value="#{value}"
                icon="#{not empty icon ? icon : ''}"
                severity="#{severity}"
                size="#{size != 'normal' ? size : null}"
                styleClass="#{styleClass}"
                disabled="#{disabled}"
                action="#{action}"
                update="#{not empty update ? update : '@form'}"
                process="#{process}"
                onclick="#{not empty onclick ? onclick : ''}" />
        </c:when>
        <c:when test="#{hasOutcome}">
            <fr:commandButton
                value="#{value}"
                icon="#{not empty icon ? icon : ''}"
                severity="#{severity}"
                size="#{size != 'normal' ? size : null}"
                styleClass="#{styleClass}"
                disabled="#{disabled}"
                outcome="#{outcome}"
                update="#{not empty update ? update : '@form'}"
                process="#{process}"
                onclick="#{not empty onclick ? onclick : ''}" />
        </c:when>
        <c:when test="#{not empty onclick}">
            <fr:commandButton
                value="#{value}"
                icon="#{not empty icon ? icon : ''}"
                severity="#{severity}"
                size="#{size != 'normal' ? size : null}"
                styleClass="#{styleClass}"
                disabled="#{disabled}"
                type="button"
                onclick="#{onclick}" />
        </c:when>
        <c:otherwise>
            <fr:commandButton
                value="#{value}"
                icon="#{not empty icon ? icon : ''}"
                severity="#{severity}"
                size="#{size != 'normal' ? size : null}"
                styleClass="#{styleClass}"
                disabled="true"
                title="Aucune action définie" />
        </c:otherwise>
    </c:choose>
    
</ui:composition>

