<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: Formulaire Rôle (WOU/DRY Pattern)
        
        Auteur: Lions User Manager
        Version: 1.0.0
        Description: Formulaire complet pour créer/modifier un rôle
        
        Paramètres:
        - role: RoleDTO (requis) - Le rôle à éditer (peut être null pour création)
        - formId: String (défaut: "roleForm") - ID du formulaire
        - mode: String (défaut: "create") - Mode: "create" ou "edit"
        - showRealmSelector: Boolean (défaut: true) - Afficher le sélecteur de realm
        - showClientSelector: Boolean (défaut: false) - Afficher le sélecteur de client
        - showCompositeOptions: Boolean (défaut: true) - Afficher les options composite
        - readonly: Boolean (défaut: false) - Mode lecture seule
        - submitAction: String (optionnel) - Action à exécuter à la soumission
        - submitOutcome: String (optionnel) - Page de redirection après soumission
        - update: String (optionnel) - Composants à mettre à jour après soumission
        
        Exemples d'utilisation:
        
        1. Formulaire de création rôle Realm:
        <ui:include src="/templates/components/role-management/role-form.xhtml">
            <ui:param name="role" value="#{roleBean.newRole}" />
            <ui:param name="mode" value="create" />
            <ui:param name="showClientSelector" value="false" />
            <ui:param name="submitAction" value="#{roleBean.createRole}" />
        </ui:include>
        
        2. Formulaire de création rôle Client:
        <ui:include src="/templates/components/role-management/role-form.xhtml">
            <ui:param name="role" value="#{roleBean.newRole}" />
            <ui:param name="mode" value="create" />
            <ui:param name="showClientSelector" value="true" />
            <ui:param name="submitAction" value="#{roleBean.createClientRole}" />
        </ui:include>
    -->
    
    <c:set var="formId" value="#{empty formId ? 'roleForm' : formId}" />
    <c:set var="mode" value="#{empty mode ? 'create' : mode}" />
    <c:set var="showRealmSelector" value="#{empty showRealmSelector ? true : showRealmSelector}" />
    <c:set var="showClientSelector" value="#{empty showClientSelector ? false : showClientSelector}" />
    <c:set var="showCompositeOptions" value="#{empty showCompositeOptions ? true : showCompositeOptions}" />
    <c:set var="readonly" value="#{empty readonly ? false : readonly}" />
    
    <h:form id="#{formId}">
        <p:panel header="#{mode == 'create' ? 'Nouveau Rôle' : 'Modifier Rôle'}" 
                 styleClass="w-full">
            
            <p:panelGrid columns="2" styleClass="w-full" columnClasses="col-12 md:col-6">
                
                <!-- Nom du rôle -->
                <p:outputLabel for="roleName" value="Nom du rôle *" />
                <p:inputText id="roleName" 
                           value="#{role.name}" 
                           required="true"
                           readonly="#{readonly}"
                           placeholder="ADMIN, USER, MODERATOR..."
                           styleClass="w-full">
                    <f:validateLength minimum="2" maximum="100" />
                    <f:validateRegex pattern="^[A-Z_]+$" />
                </p:inputText>
                
                <!-- Description -->
                <p:outputLabel for="description" value="Description" />
                <p:inputTextarea id="description" 
                               value="#{role.description}" 
                               readonly="#{readonly}"
                               placeholder="Description du rôle..."
                               rows="3"
                               styleClass="w-full" />
                
                <!-- Type de rôle -->
                <p:outputLabel for="typeRole" value="Type de rôle *" />
                <p:selectOneMenu id="typeRole" 
                               value="#{role.typeRole}" 
                               required="true"
                               readonly="#{readonly or mode == 'edit'}"
                               styleClass="w-full">
                    <f:selectItem itemLabel="Sélectionner..." itemValue="" />
                    <f:selectItem itemLabel="Rôle Realm" itemValue="REALM_ROLE" />
                    <f:selectItem itemLabel="Rôle Client" itemValue="CLIENT_ROLE" />
                    <f:selectItem itemLabel="Rôle Composite" itemValue="COMPOSITE_ROLE" />
                </p:selectOneMenu>
                
                <!-- Realm (si affiché) -->
                <c:if test="#{showRealmSelector}">
                    <p:outputLabel for="realmName" value="Realm *" />
                    <p:selectOneMenu id="realmName" 
                                   value="#{role.realmName}" 
                                   required="#{showRealmSelector}"
                                   readonly="#{readonly}"
                                   styleClass="w-full">
                        <f:selectItem itemLabel="Sélectionner..." itemValue="" />
                        <f:selectItems value="#{roleBean.availableRealms}" />
                    </p:selectOneMenu>
                </c:if>
                
                <!-- Client (si affiché) -->
                <c:if test="#{showClientSelector}">
                    <p:outputLabel for="clientId" value="Client *" />
                    <p:selectOneMenu id="clientId" 
                                   value="#{role.clientId}" 
                                   required="#{showClientSelector}"
                                   readonly="#{readonly}"
                                   styleClass="w-full">
                        <f:selectItem itemLabel="Sélectionner..." itemValue="" />
                        <f:selectItems value="#{roleBean.availableClients}" />
                    </p:selectOneMenu>
                </c:if>
                
                <!-- Rôle composite -->
                <c:if test="#{showCompositeOptions}">
                    <p:outputLabel for="composite" value="Rôle composite" />
                    <p:selectBooleanCheckbox id="composite" 
                                           value="#{role.composite}" 
                                           readonly="#{readonly}" />
                </c:if>
                
            </p:panelGrid>
            
            <!-- Boutons d'action -->
            <f:facet name="footer">
                <div class="flex gap-2 justify-content-end">
                    <c:if test="#{not readonly}">
                        <p:commandButton 
                            value="#{mode == 'create' ? 'Créer' : 'Modifier'}"
                            icon="pi pi-check"
                            styleClass="p-button-success"
                            action="#{not empty submitAction ? submitAction : null}"
                            outcome="#{not empty submitOutcome ? submitOutcome : null}"
                            update="#{not empty update ? update : '@form'}"
                            process="@form" />
                    </c:if>
                    <p:commandButton 
                        value="Annuler"
                        icon="pi pi-times"
                        styleClass="p-button-secondary"
                        outcome="#{not empty cancelOutcome ? cancelOutcome : '/pages/user-manager/roles/list'}"
                        immediate="true" />
                </div>
            </f:facet>
        </p:panel>
    </h:form>
    
</ui:composition>

