<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}" />
    <c:set var="useParentForm" value="#{empty useParentForm ? false : useParentForm}" />
    
    <c:choose>
        <c:when test="#{useParentForm}">
            <!-- Utiliser le formulaire parent (pas de h:form ici) -->
            <ui:include src="/templates/components/role-management/role-form-content.xhtml">
                <ui:param name="role" value="#{role}" />
                <ui:param name="mode" value="#{mode}" />
                <ui:param name="showRealmSelector" value="#{showRealmSelector}" />
                <ui:param name="showClientSelector" value="#{showClientSelector}" />
                <ui:param name="showCompositeOptions" value="#{showCompositeOptions}" />
                <ui:param name="readonly" value="#{readonly}" />
                <ui:param name="hasSubmitAction" value="#{hasSubmitAction}" />
                <ui:param name="submitAction" value="#{submitAction}" />
                <ui:param name="submitOutcome" value="#{submitOutcome}" />
                <ui:param name="update" value="#{update}" />
                <ui:param name="cancelOutcome" value="#{cancelOutcome}" />
                <ui:param name="dialogWidgetVar" value="#{dialogWidgetVar}" />
            </ui:include>
        </c:when>
        <c:otherwise>
            <!-- Créer son propre formulaire -->
            <h:form id="#{formId}">
                <ui:include src="/templates/components/role-management/role-form-content.xhtml">
                    <ui:param name="role" value="#{role}" />
                    <ui:param name="mode" value="#{mode}" />
                    <ui:param name="showRealmSelector" value="#{showRealmSelector}" />
                    <ui:param name="showClientSelector" value="#{showClientSelector}" />
                    <ui:param name="showCompositeOptions" value="#{showCompositeOptions}" />
                    <ui:param name="readonly" value="#{readonly}" />
                    <ui:param name="hasSubmitAction" value="#{hasSubmitAction}" />
                    <ui:param name="submitAction" value="#{submitAction}" />
                    <ui:param name="submitOutcome" value="#{submitOutcome}" />
                    <ui:param name="update" value="#{update}" />
                    <ui:param name="cancelOutcome" value="#{cancelOutcome}" />
                    <ui:param name="dialogWidgetVar" value="#{dialogWidgetVar}" />
                </ui:include>
            </h:form>
        </c:otherwise>
    </c:choose>
    
</ui:composition>

