function initSubmenuForm() {
    // Accéder aux informations stockées du parcours
    const parcours = JSON.parse(sessionStorage.getItem('parcours'));
}

// Exposer initSubmenuForm globalement pour y accéder depuis l'extérieur
window.initSubmenuForm = initSubmenuForm;// Module IIFE pour éviter la pollution de l'espace global
(function(){
    // Variables globales du module
    let parcours, contrat, client, intermediaire, matricule;

    // Initialisation du formulaire et des données
    function init() {
        const token = localStorage.getItem('jwtToken');

        if (token) {
            const decoded = jwt_decode(token);
            matricule = decoded.userMatricule;
        }

        // Accéder aux informations stockées du parcours
        parcours = JSON.parse(sessionStorage.getItem('parcours'));
        contrat = JSON.parse(sessionStorage.getItem('contrat'));
        client = contrat?.["@expand"]?.client || null;
        intermediaire = contrat?.["@expand"]?.intermediaire || null;

        console.log("Initialisation pour formulaire intermédiaire :", parcours);

        // Materialize init Modal
        var modals = document.querySelectorAll('.modal');
        M.Modal.init(modals);

        // Appel des différentes fonctions d'initialisation
        setupEventListeners();
        populateFormData();
        toggleAdditionalChoice();
        updateSubmitButtonState('intermediaireForm');
    }

    // Configuration des écouteurs d'événements
    function setupEventListeners() {
        document.getElementById('intermediaireFormBtn').addEventListener('click', function (event) {
            handleSubmitForm(event, 'tarif')
        }
        );
        document.getElementById('intermediaireFormBtnProjet').addEventListener('click', function (event) {
            handleSubmitForm(event, 'projet')
        }
        );

        document.getElementById('agent').addEventListener('change', toggleAdditionalChoice);
        document.getElementById('courtier').addEventListener('change', toggleAdditionalChoice);
        document.getElementById('cl063-intermediaire').addEventListener('click', (event) => handleExtractIntermediaire(event));
        document.getElementById('modalExtraireIntermediaire').addEventListener('click', (event) => handleModalExtract(event));

        // Handler modal mutualiste
        document.getElementById('btnMutualiste').addEventListener('click', function(){
            const elem = document.getElementById('modalMutualiste');
            const instance = M.Modal.getInstance(elem);
            instance.open();
        });

        // Controle de saisie sur les champs du formulaire        
        document.getElementById('numPortefeuille').addEventListener('input', function(){
            validateField('numPortefeuille', true);
        });

        document.getElementById('nomIntermediaire').addEventListener('input', function(){
            validateField('nomIntermediaire', true);
        });

        document.getElementById('numTelIntermediaire').addEventListener('input', function(){
            validateField('numTelIntermediaire', true);
        });

        document.getElementById('emailIntermediaire').addEventListener('input', function(){
            validateField('emailIntermediaire', true);
        });

        document.getElementById('adresseIntermediaire').addEventListener('input', function(){
            validateField('adresseIntermediaire', true);
        });

        document.getElementById('codePostalIntermediaire').addEventListener('input', function(){
            validateField('codePostalIntermediaire', true);
        });

        document.getElementById('villeIntermediaire').addEventListener('input', function(){
            validateField('villeIntermediaire', true);
        });

        document.getElementById('numOrias').addEventListener('input', function(){
            validateField('numOrias', true);
        });

        document.querySelectorAll('input').forEach((input) => {
            input.addEventListener('input', function(){
                if (document.querySelector('[name="type"]:checked')?.value) {
                    document.getElementById('message-typeInter').style.display = 'none';
                    updateSubmitButtonState('intermediaireForm');
                } else {
                    document.getElementById('message-typeInter').style.display = 'block';
                    document.getElementById('intermediaireFormBtn').disabled = true;
                    document.getElementById('intermediaireFormBtnProjet').disabled = true;
                }
            });
        });
    }

    // Peupler le formulaire avec les données
    function populateFormData() {
        if (intermediaire) {
            document.getElementById('nomIntermediaire').value = intermediaire.nom || '';
            document.getElementById('numPortefeuille').value = intermediaire.numPortefeuille || '';
            document.getElementById('numTelIntermediaire').value = intermediaire.numTelephone || '';
            document.getElementById('emailIntermediaire').value = intermediaire.mail || '';
            document.getElementById('adresseIntermediaire').value = intermediaire.adresse || '';
            document.getElementById('codePostalIntermediaire').value = intermediaire.codePostal || '';
            document.getElementById('villeIntermediaire').value = intermediaire.ville || '';
            document.getElementById('numOrias').value = intermediaire.numOrias || '';

            if (intermediaire.type) {
                document.querySelector('[id="message-typeInter"]').style.display = 'none';
                if (intermediaire.type == 'COURTIER') {
                    document.getElementById('courtier').checked = true;
                    document.getElementById('additionalChoice').style.display = 'none';
                } else {
                    document.getElementById('agent').checked = true;
                    document.getElementById('additionalChoice').style.display = 'block';

                    if (intermediaire.type == 'AGENT MUTUALISTE') {
                        document.getElementById('mutualiste').checked = true;
                    } else if (intermediaire.type == 'AGENT NON MUTUALISTE') {
                        document.getElementById('non_mutualiste').checked = true;
                    }
                }
            }
        }

        const intermediaireStorage = JSON.parse(sessionStorage.getItem('tmp'));

        if (intermediaireStorage) {
            document.getElementById('numPortefeuille').value = intermediaireStorage.numAgent || '';
            document.getElementById('nomIntermediaire').value = intermediaireStorage.nomAgent || '';
            document.getElementById('numTelIntermediaire').value = intermediaireStorage.telAgent || '';
            document.getElementById('adresseIntermediaire').value = intermediaireStorage.adresseAgent || '';
            document.getElementById('codePostalIntermediaire').value = intermediaireStorage.postalAgent || '';
            document.getElementById('villeIntermediaire').value = intermediaireStorage.villeAgent || '';
        }

        validateField('numPortefeuille', true);
        validateField('nomIntermediaire', true);
        validateField('numTelIntermediaire', true);
        validateField('adresseIntermediaire', true);
        validateField('codePostalIntermediaire', true);
        validateField('villeIntermediaire', true);
        updateSubmitButtonState('intermediaireForm');
    }

    // Fonction toggle Agent/Courtier
    function toggleAdditionalChoice() {
        // Affichez les choix supplémentaires uniquement si l'Agent est sélectionné
        const displayStyle = document.getElementById('agent').checked ? 'block' : 'none';
        document.getElementById('additionalChoice').style.display = displayStyle;
    }

    // Gérer l'extraction axaPAC
    async function handleExtractIntermediaire(event) {
        event.preventDefault();

        // Affiche le modal
        const elem = document.getElementById('modalExtractAxAPAC');
        const instance = M.Modal.getInstance(elem);
        instance.open();
    }

    async function handleModalExtract() {
        document.getElementById('modalExtraireIntermediaire').disabled = true;

        const response = await fetch(`/client/extract`, {
            method: 'POST',
            body: JSON.stringify({
                "matricule": matricule,
                "numClient": document.getElementById("modalNumClient").value
            }),
            headers: {
                'Content-Type': 'application/json',
            },
        });
        const res = await response.json();

        if (res.valid) {
            document.getElementById("error-extract").style.display = "none";
            document.getElementById('modalExtraireIntermediaire').disabled = false;
            console.log(res);
            // Save sessionStorage for Intermediaire
            sessionStorage.setItem('tmp', JSON.stringify(res.data));
            // Populate data
            document.getElementById("numPortefeuille").value = (res.data.numAgent) ? res.data.numAgent : null;
            document.getElementById("nomIntermediaire").value = (res.data.nomAgent) ? res.data.nomAgent : null;
            document.getElementById("numTelIntermediaire").value = (res.data.telAgent) ? res.data.telAgent : null;
            document.getElementById("adresseIntermediaire").value = (res.data.adresseAgent) ? res.data.adresseAgent : null;
            document.getElementById("codePostalIntermediaire").value = (res.data.postalAgent) ? res.data.postalAgent : null;
            document.getElementById("villeIntermediaire").value = (res.data.villeAgent) ? res.data.villeAgent : null;
            validateField('numPortefeuille', true);
            validateField('nomIntermediaire', true);
            validateField('numTelIntermediaire', true);
            validateField('adresseIntermediaire', true);
            validateField('codePostalIntermediaire', true);
            validateField('villeIntermediaire', true);
            updateSubmitButtonState('intermediaireForm');
            // close le modal
            const elem = document.getElementById('modalExtractAxAPAC');
            const instance = M.Modal.getInstance(elem);
            instance.close();
        } else {
            document.getElementById("error-extract").style.display = "block";
            document.getElementById('modalExtraireIntermediaire').disabled = false;
            console.log("Problème rencontré lors de l'extraction cl063 AxA PAC :", res.error);
        }
    }

    // Gérer la soumission du formulaire
    async function handleSubmitForm(event, redirection) {
        event.preventDefault();

        let idIntermediaire = intermediaire?.id;
        const numPortefeuille = document.getElementById('numPortefeuille').value;
        let responseIntermediaire;

        if (numPortefeuille) {
            responseIntermediaire = await fetch(`/intermediaire/read/${numPortefeuille}`, {
                method: 'GET',
                headers: {'Content-Type': 'application/json'},
            });
        }
        const dataIntermediaire = await responseIntermediaire.json();

        if (dataIntermediaire.valid) {
            idIntermediaire = dataIntermediaire.idIntermediaire;
        } else {
            // Créez l'intermediaire ici si non trouvé
            const responseCreateIntermediaire = await fetch(`/intermediaire/create`, {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json'
                },
            });
            const dataCreateIntermediaire = await responseCreateIntermediaire.json();

            if (dataCreateIntermediaire.valid) {
                idIntermediaire = dataCreateIntermediaire.intermediaire.id;
            }
        }

        console.log(idIntermediaire);

        // // Mettre à jour le contrat avec l'ID du intermediaire
        if (idIntermediaire) {
            let type

            if (document.getElementById('courtier').checked == true) {
                type = "COURTIER"
            } else {
                if (document.getElementById('mutualiste').checked == true) {
                    type = "AGENT MUTUALISTE"
                } else {
                    type = "AGENT NON MUTUALISTE"
                }
            }

            const response = await fetch(`/intermediaire/update/${idIntermediaire}`, {
                method: 'POST',
                body: JSON.stringify({
                    "numPortefeuille": document.getElementById('numPortefeuille').value,
                    "nom": document.getElementById('nomIntermediaire').value.toUpperCase(),
                    "numTelephone": document.getElementById('numTelIntermediaire').value,
                    "mail": document.getElementById('emailIntermediaire').value,
                    "adresse": document.getElementById('adresseIntermediaire').value.toUpperCase(),
                    "codePostal": document.getElementById('codePostalIntermediaire').value,
                    "ville": document.getElementById('villeIntermediaire').value.toUpperCase(),
                    "numOrias": document.getElementById('numOrias').value,
                    "type": type
                }),
                headers: {
                    'Content-Type': 'application/json',
                },
            });
            const data = await response.json();

            if (data.valid) {
                const idContrat = contrat?.id;

                fetch(`/contrat/update/intermediaire/${idContrat}/${idIntermediaire}`, {
                    method: 'POST',
                    headers: {
                        'Content-Type': 'application/json',
                    },
                })
                    .then(response => response.json())
                    .then(data => {
                        if (data.valid) {
                            // Update Session storage
                            const intermediaireStorage = JSON.parse(sessionStorage.getItem('tmp'));

                            if (intermediaireStorage) {
                                intermediaireStorage.numAgent = document.getElementById('numPortefeuille').value.toUpperCase();
                                intermediaireStorage.nomAgent = document.getElementById('nomIntermediaire').value;
                                intermediaireStorage.telAgent = document.getElementById('numTelIntermediaire').value.toUpperCase();
                                intermediaireStorage.adresseAgent = document.getElementById('adresseIntermediaire').value;
                                intermediaireStorage.postalAgent = document.getElementById('codePostalIntermediaire').value.toUpperCase();
                                intermediaireStorage.villeAgent = document.getElementById('villeIntermediaire').value.toUpperCase();

                                sessionStorage.setItem('tmp', JSON.stringify(intermediaireStorage))
                            }

                            if (redirection == "tarif"){
                                window.location.href = `/navParcours?numParcours=${getNumParcoursFromURL()}&submenu=tarif`;
                            } else if (redirection == "projet"){
                                window.location.href = `/navParcours?numParcours=${getNumParcoursFromURL()}&submenu=projet`;
                            }

                        } else {
                            console.log('Echec lors de la mise à jour de la relation id contrat - id client :', data);
                        }
                    });
            }
        }
    }

    // Exposer init globalement pour y accéder depuis l'extérieur
    window.initSubmenuForm = init;
})();
