<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:c="http://xmlns.jcp.org/jsp/jstl/core">

    <!--
        Composant réutilisable: Badge de Rôle Utilisateur (WOU/DRY Pattern)
        
        Auteur: Lions User Manager
        Version: 1.0.0
        Description: Affiche un badge pour un rôle utilisateur avec icône et couleur
        
        Paramètres:
        - roleName: String (requis) - Nom du rôle
        - roleType: String (optionnel) - Type de rôle: "REALM_ROLE", "CLIENT_ROLE", "COMPOSITE_ROLE"
        - severity: String (optionnel) - Severity PrimeFaces: "success", "info", "warning", "danger" (défaut: "info")
        - showIcon: Boolean (défaut: true) - Afficher l'icône
        - icon: String (optionnel) - Classe d'icône PrimeIcons (défaut: "pi-shield")
        - size: String (optionnel) - Taille: "small", "normal", "large" (défaut: "normal")
        - clickable: Boolean (défaut: false) - Rendre le badge cliquable
        - clickAction: String (optionnel) - Action au clic
        - styleClass: String (optionnel) - Classes CSS supplémentaires
        
        Exemples d'utilisation:
        
        1. Badge simple:
        <ui:include src="/templates/components/user-management/user-role-badge.xhtml">
            <ui:param name="roleName" value="ADMIN" />
        </ui:include>
        
        2. Badge avec type:
        <ui:include src="/templates/components/user-management/user-role-badge.xhtml">
            <ui:param name="roleName" value="USER" />
            <ui:param name="roleType" value="REALM_ROLE" />
            <ui:param name="severity" value="success" />
        </ui:include>
        
        3. Badge cliquable:
        <ui:include src="/templates/components/user-management/user-role-badge.xhtml">
            <ui:param name="roleName" value="MODERATOR" />
            <ui:param name="clickable" value="true" />
            <ui:param name="clickAction" value="#{roleBean.viewRole(roleName)}" />
        </ui:include>
    -->
    
    <c:set var="showIcon" value="#{empty showIcon ? true : showIcon}" />
    <c:set var="size" value="#{empty size ? 'normal' : size}" />
    <c:set var="clickable" value="#{empty clickable ? false : clickable}" />
    <c:set var="severity" value="#{empty severity ? 'info' : severity}" />
    <c:set var="icon" value="#{empty icon ? 'pi-shield' : icon}" />
    
    <!-- Déterminer la severity selon le type de rôle -->
    <c:choose>
        <c:when test="#{roleType == 'REALM_ROLE'}">
            <c:set var="severity" value="success" />
        </c:when>
        <c:when test="#{roleType == 'CLIENT_ROLE'}">
            <c:set var="severity" value="info" />
        </c:when>
        <c:when test="#{roleType == 'COMPOSITE_ROLE'}">
            <c:set var="severity" value="warning" />
        </c:when>
    </c:choose>
    
    <!-- Déterminer la taille -->
    <c:choose>
        <c:when test="#{size == 'small'}">
            <c:set var="tagStyleClass" value="text-xs" />
        </c:when>
        <c:when test="#{size == 'large'}">
            <c:set var="tagStyleClass" value="text-base" />
        </c:when>
        <c:otherwise>
            <c:set var="tagStyleClass" value="text-sm" />
        </c:otherwise>
    </c:choose>
    
    <c:choose>
        <!-- Badge cliquable -->
        <c:when test="#{clickable and not empty clickAction}">
            <p:commandLink 
                styleClass="role-badge-link"
                action="#{clickAction}">
                <p:tag 
                    value="#{roleName}" 
                    severity="#{severity}"
                    icon="#{showIcon ? icon : ''}"
                    styleClass="#{tagStyleClass} #{styleClass}" />
            </p:commandLink>
        </c:when>
        
        <!-- Badge simple -->
        <c:otherwise>
            <p:tag 
                value="#{roleName}" 
                severity="#{severity}"
                icon="#{showIcon ? icon : ''}"
                styleClass="#{tagStyleClass} #{styleClass}" />
        </c:otherwise>
    </c:choose>
    
</ui:composition>

