<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 Utilisateur (WOU/DRY Pattern)
        
        Auteur: Lions User Manager
        Version: 1.0.0
        Description: Formulaire complet pour créer/modifier un utilisateur
        
        Paramètres:
        - user: UserDTO (requis) - L'utilisateur à éditer (peut être null pour création)
        - formId: String (défaut: "userForm") - ID du formulaire
        - mode: String (défaut: "create") - Mode: "create" ou "edit"
        - showRealmSelector: Boolean (défaut: false) - Afficher le sélecteur de realm
        - showPasswordFields: Boolean (défaut: true) - Afficher les champs mot de passe
        - readonly: Boolean (défaut: false) - Mode lecture seule
        - submitAction: String (optionnel) - Expression de méthode JSF à exécuter (ex: "#{bean.method}")
        - submitOutcome: String (optionnel) - Page de redirection après soumission
        - update: String (optionnel) - Composants à mettre à jour après soumission
        - hasSubmitAction: Boolean (optionnel) - Indicateur si submitAction est fourni (pour éviter l'évaluation)
        - useParentForm: Boolean (défaut: false) - Utiliser le formulaire parent au lieu de créer un nouveau formulaire
        
        Exemples d'utilisation:
        
        1. Formulaire de création:
        <ui:include src="/templates/components/user-management/user-form.xhtml">
            <ui:param name="user" value="#{userBean.newUser}" />
            <ui:param name="mode" value="create" />
            <ui:param name="submitAction" value="#{userBean.createUser}" />
        </ui:include>
        
        2. Formulaire d'édition:
        <ui:include src="/templates/components/user-management/user-form.xhtml">
            <ui:param name="user" value="#{userBean.selectedUser}" />
            <ui:param name="mode" value="edit" />
            <ui:param name="showPasswordFields" value="false" />
            <ui:param name="submitAction" value="#{userBean.updateUser}" />
        </ui:include>
        
        3. Formulaire en lecture seule:
        <ui:include src="/templates/components/user-management/user-form.xhtml">
            <ui:param name="user" value="#{userBean.selectedUser}" />
            <ui:param name="readonly" value="true" />
        </ui:include>
    -->
    
    <c:set var="formId" value="#{empty formId ? 'userForm' : formId}" />
    <c:set var="mode" value="#{empty mode ? 'create' : mode}" />
    <c:set var="showRealmSelector" value="#{empty showRealmSelector ? false : showRealmSelector}" />
    <c:set var="showPasswordFields" value="#{empty showPasswordFields ? true : showPasswordFields}" />
    <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 formulaire ici -->
            <ui:include src="/templates/components/user-management/user-form-content.xhtml">
                <ui:param name="user" value="#{user}" />
                <ui:param name="mode" value="#{mode}" />
                <ui:param name="showRealmSelector" value="#{showRealmSelector}" />
                <ui:param name="showPasswordFields" value="#{showPasswordFields}" />
                <ui:param name="readonly" value="#{readonly}" />
                <ui:param name="submitAction" value="#{submitAction}" />
                <ui:param name="submitOutcome" value="#{submitOutcome}" />
                <ui:param name="update" value="#{update}" />
                <ui:param name="hasSubmitAction" value="#{hasSubmitAction}" />
                <ui:param name="cancelOutcome" value="#{cancelOutcome}" />
            </ui:include>
        </c:when>
        <c:otherwise>
            <!-- Créer son propre formulaire -->
            <h:form id="#{formId}">
                <ui:include src="/templates/components/user-management/user-form-content.xhtml">
                    <ui:param name="user" value="#{user}" />
                    <ui:param name="mode" value="#{mode}" />
                    <ui:param name="showRealmSelector" value="#{showRealmSelector}" />
                    <ui:param name="showPasswordFields" value="#{showPasswordFields}" />
                    <ui:param name="readonly" value="#{readonly}" />
                    <ui:param name="submitAction" value="#{submitAction}" />
                    <ui:param name="submitOutcome" value="#{submitOutcome}" />
                    <ui:param name="update" value="#{update}" />
                    <ui:param name="hasSubmitAction" value="#{hasSubmitAction}" />
                    <ui:param name="cancelOutcome" value="#{cancelOutcome}" />
                </ui:include>
            </h:form>
        </c:otherwise>
    </c:choose>
    
</ui:composition>

