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, produit;

    // Initialisation du formulaire et des données
    function init() {
        // Materialize init select
        var select = document.querySelectorAll('select');
        M.FormSelect.init(select);

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

        // 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;
        produit = contrat?.["@expand"]?.enCours || null;

        console.log("Initialisation pour formulaire projet :", parcours);

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

    // Configuration des écouteurs d'événements
    function setupEventListeners() {
        document.getElementById('projetFormBtn').addEventListener('click', handleSubmitForm);

        document.getElementById('loadHistoriqueBtn').addEventListener('click', function () {
            handleLoadHistoriqueBtn();
        });

        document.getElementById('btnAddAdditionnel').addEventListener('click', function () {
            const nomValue = document.getElementById('nomAdditionnel').value || 'Non défini';
            const adresseValue = document.getElementById('adresseAditionnel').value || 'Non défini';
            const siretValue = document.getElementById('siretAdditionnel').value || 'Non défini';

            addRowAdditionnel(nomValue, adresseValue, siretValue);
        });

        document.getElementById('btnMondeEntier').addEventListener('click', function () {
            document.getElementById('zone1').checked = true;
            document.getElementById('zone1').disabled = true;
            document.getElementById('zone2').checked = true;
            document.getElementById('zone2').disabled = true;
            document.getElementById('zone3').checked = true;
            document.getElementById('zone4').checked = true;
            document.getElementById('zone5').checked = true;
            document.getElementById('zone6').checked = true;
        });

        document.getElementById('btnReset').addEventListener('click', function () {
            document.getElementById('zone1').checked = false;
            document.getElementById('zone1').disabled = false;
            document.getElementById('zone2').checked = false;
            document.getElementById('zone2').disabled = false;
            document.getElementById('zone3').checked = false;
            document.getElementById('zone4').checked = false;
            document.getElementById('zone5').checked = false;
            document.getElementById('zone6').checked = false;
        });

        document.getElementById('btnZone1').addEventListener('click', function () {
            const elem = document.getElementById('modalZone1');
            const instance = M.Modal.getInstance(elem);
            instance.open();
        });

        document.getElementById('btnZone2').addEventListener('click', function () {
            const elem = document.getElementById('modalZone2');
            const instance = M.Modal.getInstance(elem);
            instance.open();
        });

        document.getElementById('btnZone3').addEventListener('click', function () {
            const elem = document.getElementById('modalZone3');
            const instance = M.Modal.getInstance(elem);
            instance.open();
        });

        document.getElementById('btnZone4').addEventListener('click', function () {
            const elem = document.getElementById('modalZone4');
            const instance = M.Modal.getInstance(elem);
            instance.open();
        });

        document.getElementById('btnZone5').addEventListener('click', function () {
            const elem = document.getElementById('modalZone5');
            const instance = M.Modal.getInstance(elem);
            instance.open();
        });

        document.getElementById('btnZone6').addEventListener('click', function () {
            const elem = document.getElementById('modalZone6');
            const instance = M.Modal.getInstance(elem);
            instance.open();
        });

        document.getElementById('btnZone7').addEventListener('click', function () {
            const elem = document.getElementById('modalZoneExclus');
            const instance = M.Modal.getInstance(elem);
            instance.open();
        });

        document.getElementById('zone2').addEventListener('click', function () {
            if (document.getElementById('zone2').checked == true) {
                document.getElementById('zone1').checked = true;
                document.getElementById('zone1').disabled = true;
            } else if (document.getElementById('zone2').checked == false) {
                document.getElementById('zone1').checked = true;
                document.getElementById('zone1').disabled = false;
            }
        });

        document.getElementById('zone3').addEventListener('click', function () {
            if (document.getElementById('zone3').checked == true) {
                document.getElementById('zone2').checked = true;
                document.getElementById('zone1').checked = true;
                document.getElementById('zone2').disabled = true;
                document.getElementById('zone1').disabled = true;
            } else if (document.getElementById('zone3').checked == false) {
                document.getElementById('zone1').checked = true;
                document.getElementById('zone1').disabled = true;
                document.getElementById('zone2').checked = true;
                document.getElementById('zone2').disabled = false;
            }
        });

        var radioButtonsFract = document.getElementsByName('fract');
        for (var i = 0; i < radioButtonsFract.length; i++) {
            radioButtonsFract[i].addEventListener('change', function () {
                if (this.value == "mensuel") {
                    document.getElementById("cotFraisHT").value = 36.00;
                } else if (this.value == "trimestriel") {
                    document.getElementById("cotFraisHT").value = 144.00;
                } else if (this.value == "semestriel") {
                    document.getElementById("cotFraisHT").value = 72.00;
                } else if (this.value == "annuel") {
                    document.getElementById("cotFraisHT").value = 36.00;
                }
                calcCotAnnuelle()
            });
        };

        document.getElementById('btnNullDateDebut').addEventListener('click', function () {
            document.getElementById('dateEffet').value = "00/00/0000";
            validateField('dateEffet', true);
            updateSubmitButtonState('projetForm');
        });

        document.getElementById('btnNullDateEcheance').addEventListener('click', function () {
            document.getElementById('dateEcheance').value = "00/00";
            validateField('dateEcheance', true);
            updateSubmitButtonState('projetForm');
        });

        document.getElementById('btnNullDateFin').addEventListener('click', function () {
            document.getElementById('dateFin').value = "00/00/0000";
            validateField('dateFin', true);
            updateSubmitButtonState('projetForm');
        });

        document.getElementById('btnModalDate').addEventListener('click', function () {
            const elem = document.getElementById('modalDate');
            const instance = M.Modal.getInstance(elem);
            instance.open();
        });

        document.getElementById('dateEffet').addEventListener('input', function () {
            validateField('dateEffet', true);
            updateSubmitButtonState('projetForm');
        });

        document.getElementById('dateFin').addEventListener('input', function () {
            validateField('dateFin', true);
            updateSubmitButtonState('projetForm');
        });

        document.getElementById('dateEcheance').addEventListener('input', function () {
            validateField('dateEcheance', true);
            updateSubmitButtonState('projetForm');
        });

        document.getElementById('CA').addEventListener('input', function () {
            validateField('CA', true);
            updateSubmitButtonState('projetForm');
            calcCotAnnuelle();
        });

        document.getElementById('cotisationIrreductible').addEventListener('input', function () {
            validateField('cotisationIrreductible', true);
            updateSubmitButtonState('projetForm');
        });

        document.getElementById('tauxCotRG').addEventListener('input', function () {
            validateField('tauxCotRG', true);
            updateSubmitButtonState('projetForm');
        });

        document.getElementById('tauxCotRO').addEventListener('input', function () {
            validateField('tauxCotRO', true);
            updateSubmitButtonState('projetForm');
            calcCotAnnuelle();
        });

        document.getElementById('capitalColis').addEventListener('input', function () {
            validateField('capitalColis', true);
            updateSubmitButtonState('projetForm');
        });

        document.getElementById('capitalMax').addEventListener('input', function () {
            validateField('capitalMax', true);
            updateSubmitButtonState('projetForm');
        });

        document.getElementById('capitalExped').addEventListener('input', function () {
            validateField('capitalExped', true);
            updateSubmitButtonState('projetForm');
        });

        document.getElementById('capitalTPPC').addEventListener('input', function () {
            validateField('capitalTPPC', true);
            updateSubmitButtonState('projetForm');
        });

        document.getElementById('capitalExpo').addEventListener('input', function () {
            validateField('capitalExpo', true);
            updateSubmitButtonState('projetForm');
        });

        document.getElementById('franchiseTransport').addEventListener('input', function () {
            validateField('franchiseTransport', true);
            updateSubmitButtonState('projetForm');
        });

        document.getElementById('franchiseTPPC').addEventListener('input', function () {
            validateField('franchiseTPPC', true);
            updateSubmitButtonState('projetForm');
        });

        document.getElementById('franchiseExpo').addEventListener('input', function () {
            validateField('franchiseExpo', true);
            updateSubmitButtonState('projetForm');
        });

        document.getElementById('cotProvRG').addEventListener('input', function () {
            validateField('cotProvRG', true);
            updateSubmitButtonState('projetForm');
            calcCotAnnuelle();
        });

        document.getElementById('cotProvRO').addEventListener('input', function () {
            validateField('cotProvRO', true);
            updateSubmitButtonState('projetForm');
            calcCotAnnuelle();
        });

        document.getElementById('cotRO').addEventListener('input', function () {
            validateField('cotRO', true);
            updateSubmitButtonState('projetForm');
        });

        document.getElementById('cotRG').addEventListener('input', function () {
            validateField('cotRG', true);
            updateSubmitButtonState('projetForm');
        });

        document.getElementById('cotComptant').addEventListener('input', function () {
            validateField('cotComptant', true);
            updateSubmitButtonState('projetForm');
        });

        document.getElementById('cotAnnuelle').addEventListener('input', function () {
            validateField('cotAnnuelle', true);
            updateSubmitButtonState('projetForm');
        });

        document.getElementById('cotAnnuelleHT').addEventListener('input', function () {
            validateField('cotAnnuelleHT', true);
            updateSubmitButtonState('projetForm');
        });

        document.getElementById('marExpo').addEventListener('input', function () {
            validateField('marExpo', true);
            updateSubmitButtonState('projetForm');
        });

        document.getElementById('typeMar').addEventListener('input', function () {
            validateField('typeMar', true);
            updateSubmitButtonState('projetForm');
        });

        document.getElementById('activite').addEventListener('input', function () {
            validateField('activite', true);
            updateSubmitButtonState('projetForm');
        });

        document.querySelectorAll('table[id="moyenTransport"] input').forEach((element) => element.addEventListener('click', function () {
            transportChoixUnique(this)
        }));

        document.getElementById('risqueTransport').addEventListener('change', function () {
            afficherChip(document.querySelectorAll('select[name="risqueTransport"] option:not([value="placeholder"])'))
        });

        document.getElementById('garantieOpt').addEventListener('change', function () {
            afficherChip(document.querySelectorAll('select[name="garantieOpt"] option:not([value="placeholder"])'))
        });

        document.getElementById("TPPC").addEventListener('change', function () {
            toggleTypeTPPC(this)
        });

        document.getElementById("marchandise-exposition").addEventListener('change', function () {
            toggleNombreExpo(this)
        });

        document.querySelectorAll('input[name="risqueGuerre"]').forEach((element) => element.addEventListener('change', function () {
            toggleRG(this)
        }));

        document.querySelectorAll('input[name="typeContrat"]').forEach((element) => element.addEventListener('change', function () {
            toggleTypeContrat(this)
        }));

        document.querySelectorAll('input[name="valeurAssuree"]').forEach((element) => element.addEventListener('change', function () {
            toggleValeurAssuree(this)
        }));
    }

    // Handle event spécifique au limite de garantie activité
    window.handleInputActivity = function (inputId) {
        validateField(inputId, true);
        updateSubmitButtonState('projetForm');
    };

    // Peupler le formulaire avec les données
    function populateFormData() {
        //Poupulate select historique
        if (!contrat.historique) {
            document.getElementById('historiqueDiv').style.display = "none";
        } else {
            document.getElementById('historiqueDiv').style.display = "block";

            const idSelect = document.getElementById('idSelect');

            contrat.historique.forEach(function (item) {
                var option = document.createElement('option');
                option.value = item.id;
                const produitNom = item.produit.toUpperCase()
                option.textContent = item.type + " " + produitNom + " - " + item.date + " - " + item.heure;

                if (item.nom != undefined && item.prenom != undefined) {
                    option.textContent += " - " + item.nom + " " + item.prenom;
                }

                idSelect.appendChild(option);
            });

            M.FormSelect.init(idSelect);
        }

        if (produit.actAssure) {
            document.getElementById('activite').defaultValue = produit.actAssure
        }
        if (produit.typeMar) {
            document.getElementById('typeMar').defaultValue = produit.typeMar
        }
        if (produit.valeurAssuree) {document.querySelector('input[value="' + produit.valeurAssuree + '"][name="valeurAssuree"]').checked = true;}

        if (produit.valeurAssuree == 'derogation') {
            document.getElementById('row-valeurAssureeBase').style.display = "flex";
            produit.valeurAssureeBase.forEach((option) => {
                document.querySelector('input[value="' + option + '"][name="valeurAssureeBase"]').checked = true;
            });
        }

        populateAssuresAdditionnels(produit);

        //Zone Geo
        populateZoneGeo(produit);

        //Moyen de Transport
        if (produit.aerien) {
            document.querySelector('input[value="' + produit.aerien + '"][name="aerien"]').checked = true;
        }
        if (produit.terrestre) {
            document.querySelector('input[value="' + produit.terrestre + '"][name="terrestre"]').checked = true;
        }
        if (produit.maritime) {
            document.querySelector('input[value="' + produit.maritime + '"][name="maritime"]').checked = true;
        }
        if (produit.postal) {
            document.querySelector('input[value="' + produit.postal + '"][name="postal"]').checked = true;
        }
        if (produit.fluvial) {
            document.querySelector('input[value="' + produit.fluvial + '"][name="fluvial"]').checked = true;
        }

        //infos Garanties
        if (produit.typeTPPC && produit.typeTPPC !== "") {
            document.getElementById('TPPC').checked = true;
            document.getElementById("col-typetppc").style.display = "block";
            document.querySelector('input[value="' + produit.typeTPPC + '"][name="typeTPPC"]').checked = true;
            toggleTypeTPPC(document.getElementById('TPPC'));
            document.getElementById('capitalTPPC').defaultValue = produit.capitalTPPC;
            document.getElementById('franchiseTPPC').defaultValue = produit.franchiseTPPC;
        }

        //infos Garanties
        if (produit.marExpo > 0) {
            document.getElementById('marchandise-exposition').checked = true;
            document.getElementById('col-numMarExpo').style.display = "block";
            document.getElementById("marExpo").defaultValue = produit.marExpo;
            toggleNombreExpo(document.getElementById('marchandise-exposition'));
            document.getElementById('capitalExpo').defaultValue = produit.capitalExpo;
            document.getElementById('franchiseExpo').defaultValue = produit.franchiseExpo;
        }

        if (produit.risqueTransport && produit.risqueTransport != []) {
            produit.risqueTransport.forEach((option) => {
                document.querySelector('select[name="risqueTransport"] option[value="' + option + '"]').selected = true;
                document.getElementById(option + '-chip').style.display = "inline-block";
            });
        }

        if (produit.risqueGuerre) {
            const risqueGuerre = produit.risqueGuerre ?? "";
            document.querySelector('input[value="' + risqueGuerre + '"][name="risqueGuerre"]').checked = true;
            toggleRG(document.querySelector('input[value="' + risqueGuerre + '"][name="risqueGuerre"]'));

            if (risqueGuerre == "auto") {
                document.querySelector('input[value="' + produit.typeGarantieRG + '"][name="typeGarantieRG"]').checked = true;
                document.getElementById("tauxCotRG").defaultValue = produit.tauxCotRG;
            }
        }

        if (produit.cotProvRG) {
            document.getElementById("cotProvRO").defaultValue = produit.cotProvRO;
        }
        if (produit.cotProvRO) {
            document.getElementById("cotProvRG").defaultValue = produit.cotProvRG;
        }

        if (produit.garOpt && produit.garOpt != []) {
            produit.garOpt.forEach((option) => {
                document.querySelector('select[name="garantieOpt"] option[value="' + option + '"]').selected = true;
                document.getElementById(option + '-chip').style.display = "inline-block";
            });
        }

        //Infos Contrat
        // Populate temporalité
        if (produit.tempo) {
            document.getElementById(produit.tempo).checked = true;
            if (produit.tempo == "mensuel" || produit.tempo == "annuel") {
                document.getElementById("cotFraisHT").value = 36.00;
            } else if (produit.tempo == "trimestriel") {
                document.getElementById("cotFraisHT").value = 144.00;
            } else if (produit.tempo == "semestriel") {
                document.getElementById("cotFraisHT").value = 72.00;
            }
        };

        if (produit.dateEffet) {document.getElementById("dateEffet").value = produit.dateEffet;};
        if (produit.dateEcheance) {document.getElementById("dateEcheance").value = produit.dateEcheance;};
        if (produit.dateFin) {document.getElementById("dateFin").value = produit.dateFin;};
        if (produit.programmeInternational) {document.getElementById("programmeInternationale").checked = true;}
        if (produit.participationResultat) {document.getElementById("participationResultat").checked = true;}
        if (produit.coassurance) {document.getElementById("coassurance").checked = true;}
        if (produit.lieuDepart) {document.getElementById("depart").defaultValue = produit.lieuDepart;}
        if (produit.lieuArrivee) {document.getElementById("arrivee").defaultValue = produit.lieuArrivee;}

        //cotisations
        if (produit.typeContrat) {
            document.querySelector('input[value="' + produit.typeContrat + '"][name="typeContrat"]').checked = true;
            toggleTypeContrat(document.querySelector('input[value="' + produit.typeContrat + '"][name="typeContrat"]'));
        }

        document.getElementById('CA').defaultValue = produit.ca ?? '';
        document.getElementById('cotisationIrreductible').defaultValue = produit.cotIrred ?? '';

        if (produit.capitalMax) {document.getElementById('capitalMax').defaultValue = produit.capitalMax;}
        if (produit.capitalColis) {document.getElementById('capitalColis').defaultValue = produit.capitalColis;}
        if (produit.capitalExped) {document.getElementById('capitalExped').defaultValue = produit.capitalExped;}

        if (produit.franchiseTransport) {document.getElementById('franchiseTransport').defaultValue = produit.franchiseTransport;}

        if (produit.tauxCotRG) {document.getElementById('tauxCotRG').defaultValue = produit.tauxCotRG;}
        if (produit.tauxCotRO) {document.getElementById('tauxCotRO').defaultValue = produit.tauxCotRO;}

        if (produit.cotProvRG) {document.getElementById('cotProvRG').defaultValue = produit.cotProvRG;}
        if (produit.cotProvRO) {document.getElementById('cotProvRO').defaultValue = produit.cotProvRO;}
        if (produit.cotRG) {document.getElementById('cotRG').defaultValue = produit.cotRG;}
        if (produit.cotRO) {document.getElementById('cotRO').defaultValue = produit.cotRO;}
        if (produit.cotAnnuelleHT) {document.getElementById('cotAnnuelleHT').defaultValue = produit.cotAnnuelleHT;}
        if (produit.cotAnnuelleTTC) {document.getElementById('cotAnnuelle').defaultValue = produit.cotAnnuelleTTC;}
        if (produit.cotComptant) {document.getElementById('cotComptant').defaultValue = produit.cotComptant;}
    }

    function populateAssuresAdditionnels(fac) {
        if (!fac || !fac.assureAdditionnel || Object.keys(fac.assureAdditionnel).length === 0) {
            console.log("Le JSON est vide, pas d'assurés additionnels à pré-remplir.");
        } else {
            document.getElementById('additionel').checked = true;
            document.getElementById('checkAdditionnel').style.display = "block";

            for (let i = 0; i < fac.assureAdditionnel.length; i++) {
                const row = fac.assureAdditionnel[i];
                addRowAdditionnel(row.nom, row.adresse, row.siret);
            }
        }
    }

    function populateZoneGeo(fac) {
        if (fac.zone1) {document.getElementById("zone1").checked = true;};
        if (fac.zone2) {
            document.getElementById("zone2").checked = true;
            document.getElementById("zone1").checked = true;
            document.getElementById("zone1").disabled = true;
        };
        if (fac.zone3) {
            document.getElementById("zone3").checked = true;
            document.getElementById("zone2").checked = true;
            document.getElementById("zone2").disabled = true;
            document.getElementById("zone1").checked = true;
            document.getElementById("zone1").disabled = true;
        };
        if (fac.zone4) {document.getElementById("zone4").checked = true;};
        if (fac.zone5) {document.getElementById("zone5").checked = true;};
        if (fac.zone6) {document.getElementById("zone6").checked = true;};
    }

    function handleLoadHistoriqueBtn() {
        var selectedId = document.getElementById('idSelect').value;

        if (selectedId != "") {
            fetch(`/contrat/update/${contrat.produit}/${contrat.id}/${selectedId}`, {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json',
                },
            })
            .then(response => response.json())
            .then(data => {
                if (data.valid) {
                    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);
                }
            });
        }
    }

    // Ajouter une ligne au tableau
    function addRowAdditionnel(nomValue, adresseValue, siretValue) {
        const table = document.getElementById('empTableAdditionnel');

        // Créer une nouvelle ligne avec des inputs éditables
        const newRow = table.insertRow(table.rows.length - 1);
        newRow.innerHTML = `
            <td><input type="text" name="nom" value="${nomValue}" class="input-field" /></td>
            <td><input type="text" name="adresse" value="${adresseValue}" class="input-field" /></td>
            <td><input type="text" name="siret" value="${siretValue}" class="input-field" /></td>
            <td>
                <button class="btn delete-btn" type="button">
                    <i class="material-icons">delete</i>
                </button>
            </td>
        `;

        // Réinitialiser les valeurs de saisie
        document.getElementById('nomAdditionnel').value = '';
        document.getElementById('adresseAditionnel').value = '';
        document.getElementById('siretAdditionnel').value = '';

        // Ajouter un écouteur d'événements pour supprimer
        newRow.querySelector('.delete-btn').addEventListener('click', function () {
            deleteRow(this);
        });
    }

    // Supprimer une ligne du tableau 
    function deleteRow(btn) {
        const row = btn.parentElement.parentElement;
        row.parentElement.removeChild(row);
    }

    // Contruit la structure Assuré additionnel à envoyer à la BDD
    function extractAssureAdditionnel(tableId) {
        const jsonArr = [];
        const table = document.getElementById(tableId);

        if (table && document.getElementById("additionel").checked) {
            const rows = table.querySelectorAll('tr:not(:first-child)');

            rows.forEach(row => {
                const allInputsEmpty = Array.from(row.querySelectorAll('input')).every(input => input.value === '');
                if (!allInputsEmpty) {
                    const inputs = row.querySelectorAll('input');
                    const dataObj = {};

                    inputs.forEach(input => {
                        const fieldName = input.getAttribute('name');
                        const fieldValue = input.value || "Non défini";
                        dataObj[fieldName] = fieldValue;
                    });

                    jsonArr.push(dataObj);
                }
            });

            const jsonResult = JSON.stringify(jsonArr, null, 2);
            return jsonResult;
        }

        return "[]"; // Retourne un tableau JSON vide si aucune saisie n'est trouvée dans le tableau
    }

    function extractTempo() {
        let tempo = "";

        if (document.getElementById("mensuel").checked == true) {tempo = "mensuel";}
        if (document.getElementById("trimestriel").checked == true) {tempo = "trimestriel";}
        if (document.getElementById("semestriel").checked == true) {tempo = "semestriel";}
        if (document.getElementById("annuel").checked == true) {tempo = "annuel";}

        return tempo;
    }

    function calcCotAnnuelle() {
        const valueCA = parseFloat(document.getElementById("CA").value) || 0;
        const valueTaux = parseFloat(document.getElementById("tauxCotRO").value) || 0;
        const valueFractionnement = parseFloat(document.getElementById("cotFraisHT").value) || 0
        const valueCotRO = parseFloat(document.getElementById("cotProvRO").value) || 0;
        const valueCotRG = parseFloat(document.getElementById("cotProvRG").value) || 0;
        const valueContribAttentat = 6.50;

        const cotHT = (valueCA * valueTaux / 100);
        const cotTTC = (cotHT + valueFractionnement + valueContribAttentat + valueCotRG + valueCotRO);

        document.getElementById("cotAnnuelleHT").value = cotHT.toFixed(2);
        document.getElementById("cotAnnuelle").value = cotTTC.toFixed(2);
    }

    function transportChoixUnique(element) {        //Empêche de cochage des evenements majeurs ET tous risques
        if (element.checked) {
            if (element.id == element.name + '-tousRisques') {
                document.querySelector('input[id=' + element.name + '-eventMaj]').checked = false
            } else {
                document.querySelector('input[id=' + element.name + '-tousRisques]').checked = false
            }
        }
    }

    function afficherChip(element) {    //Affiche les options selectionnées sous forme de chip
        element.forEach(option => {
            if (option.selected) {
                document.getElementById(option.value + '-chip').style.display = "inline-block"
            } else {
                document.getElementById(option.value + '-chip').style.display = "none"
            }
        })
    }

    function toggleTypeTPPC(element) {      //Affiche/Desaffiche les options liées au TPPC
        document.getElementById('col-typetppc').style.display = element.checked ? "block" : "none"
        document.getElementById('row-franchiseTPPC').style.display = element.checked ? "table-row" : "none"
        document.getElementById('row-capitalTPPC').style.display = element.checked ? "table-row" : "none"
    }

    function toggleNombreExpo(element) {    //Affiche/Desaffiche les options liées à la marchandise d'expo
        document.getElementById("col-numMarExpo").style.display = element.checked ? "block" : "none"
        document.getElementById("row-capitalExpo").style.display = element.checked ? "table-row" : "none"
        document.getElementById("row-franchiseExpo").style.display = element.checked ? "table-row" : "none"

    }

    function toggleRG(element) {        //Affiche/Desaffiche les options liées aux risques de guerre
        if (element.value == "auto" || element.value == "") {
            document.getElementById("row-tauxCotRG").style.display = "table-row"
            document.getElementById("row-cotProvRO").style.display = "table-row"
            document.getElementById("row-cotProvRG").style.display = "table-row"
        } else if (element.value = "demande") {
            document.getElementById("row-tauxCotRG").style.display = "none"
            document.getElementById("row-cotProvRO").style.display = "none"
            document.getElementById("row-cotProvRG").style.display = "none"
        }
        document.getElementById("row-typeGarantieRG").style.display = element.value == "auto" ? "block" : "none"
    }

    function toggleTypeContrat(element) {       //Affiche/Desaffiche les options liées au type de déclaration
        if (contrat.type !== "TEMPORAIRE") {
            if (element.value == "avisAliments") {
                document.getElementById("colTauxAjustement").style.display = "none"
                document.getElementById("colDetailCot").style.display = "none"
                document.getElementById("colCA").style.display = "none"
                document.getElementById("colCotMini").style.display = "none"
            } else if (element.value == "chiffreAffaires") {
                document.getElementById("colTauxAjustement").style.display = "block"
                document.getElementById("colDetailCot").style.display = "block"
                document.getElementById("colCA").style.display = "block"
                document.getElementById("colCotMini").style.display = "block"
            }
        }

    }

    function toggleValeurAssuree(element) {      //Affiche/desaffiche les options liées à la valeur assurées
        document.getElementById("row-valeurAssureeBase").style.display = element.value == "derogation" ? "flex" : "none"
    }

    function afficherFAC() {
        if (contrat.type == "AN") {
            document.getElementById('row-rg-no').style.display = "none"
            document.getElementById('row-detailsVoyage').style.display = "none"
            document.getElementById('row-cotAnnuelle').style.display = "table-row"
            document.getElementById('colTypeContrat').style.display = "block"
            document.getElementById('col-valeurAssuree').style.display = "block"
            document.getElementById('col-activite').style.display = "block"
        } else if (contrat.type == "TEMPORAIRE") {
            document.getElementById('row-zonesGeo').style.display = "none"
            document.getElementById('row-TPPC').style.display = "none"
            document.getElementById('row-rg-demande').style.display = "none"
            document.getElementById('row-rg-no').style.display = "block"
            document.getElementById('rg-demande').checked = false
            document.getElementById('rg-auto').checked = true
            document.getElementById('row-risqueTransport').style.display = "none"
            document.getElementById('colTypeContrat').style.display = "none"
            document.getElementById('row-fractionnement').style.display = "none"
            document.getElementById('rowDateEcheance').style.display = "none"
            document.getElementById('rowDateFin').style.display = "block"
            document.getElementById('row-detailsVoyage').style.display = "block"
            document.getElementById('row-programmeInternational').style.display = "none"
            document.getElementById('row-participationResultats').style.display = "none"
            document.getElementById('row-cotAnnuelle').style.display = "none"
            document.getElementById('row-typeGarantieRG').style.display = "block"
            document.getElementById('row-cotRO').style.display = "table-row"
            document.getElementById('row-cotRG').style.display = "table-row"
            document.getElementById('row-cotComptant').style.display = "table-row"
            document.getElementById('row-capitalColis').style.display = "none"
            document.getElementById('row-capitalExped').style.display = "none"
            document.getElementById('colTauxAjustement').style.display = "none"
            document.getElementById('colCA').style.display = "none"
            document.getElementById('colCotMini').style.display = "none"
            document.getElementById('col-activite').style.display = "none"
            document.getElementById('activite').value = "not-null"
            document.getElementById('col-valeurAssuree').style.display = "none"
        } else if (contrat.type == "REMPLACEMENT") {
            document.getElementById('row-rg-no').style.display = "none"
            document.getElementById('row-detailsVoyage').style.display = "none"
            document.getElementById('row-cotProvRO').style.display = "table-row"
            document.getElementById('row-cotProvRG').style.display = "table-row"
            document.getElementById('row-cotAnnuelle').style.display = "table-row"
            document.getElementById('colTypeContrat').style.display = "block"
            document.getElementById('col-valeurAssuree').style.display = "block"
            document.getElementById('col-activite').style.display = "block"
        }
    }

    function choixMultipleArray(name, select = false) {
        if (select) {
            return [...document.querySelectorAll('select[name="' + name + '"] option:checked:not([value="placeholder"])')].map((element) => element.value)
        } else {
            return [...document.querySelectorAll('input[name="' + name + '"]:checked')].map((element) => element.value)
        }
    }

    function verifierAccesValeur(id, regles) {
        var valide = true

        for (const regle of regles) {
            if (!document.getElementById(regle)?.checked) {valide = false}
        }

        return valide ? document.getElementById(id).value : ""
    }


    // Gérer la soumission du formulaire
    async function handleSubmitForm(event) {
        event.preventDefault();
        const body = {
            // Activités
            "actAssure": contrat.type !== "TEMPORAIRE" ? document.getElementById("activite").value : "",
            "typeMar": document.getElementById('typeMar').value,
            "valeurAssuree": contrat.type !== "TEMPORAIRE" ? document.querySelector('input[name="valeurAssuree"]:checked').value : "",
            "valeurAssureeBase": document.getElementById('valeurAssuree-degoration').checked ? choixMultipleArray("valeurAssureeBase") : "",
            "assureAdditionnel": extractAssureAdditionnel('empTableAdditionnel'),

            // Territorialités
            "zone1": document.getElementById("zone1").checked,
            "zone2": document.getElementById("zone2").checked,
            "zone3": document.getElementById("zone3").checked,
            "zone4": document.getElementById("zone4").checked,
            "zone5": document.getElementById("zone5").checked,
            "zone6": document.getElementById("zone6").checked,

            //Moyen de Transport
            "terrestre": document.querySelector('input[name="terrestre"]:checked')?.value ?? "",
            "maritime": document.querySelector('input[name="maritime"]:checked')?.value ?? "",
            "aerien": document.querySelector('input[name="aerien"]:checked')?.value ?? "",
            "postal": document.querySelector('input[name="postal"]:checked')?.value ?? "",
            "fluvial": document.querySelector('input[name="fluvial"]:checked')?.value ?? "",

            //Infos Garanties
            "typeTPPC": document.getElementById('TPPC').checked ? document.querySelector('input[name="typeTPPC"]:checked').value : "",
            "marExpo": document.getElementById('marchandise-exposition').checked ? document.getElementById('marExpo').value : "",
            "risqueTransport": choixMultipleArray('risqueTransport', true),
            "garOpt": choixMultipleArray('garantieOpt', true),
            "risqueGuerre": document.querySelector('input[name="risqueGuerre"]:checked').value,
            "typeGarantieRG": document.getElementById('rg-auto').checked ? document.querySelector('input[name="typeGarantieRG"]:checked').value : "",

            // Temporalités
            "tempo": contrat.type !== "TEMPORAIRE" ? extractTempo() : '',
            "dateEffet": document.getElementById("dateEffet").value,
            "dateEcheance": document.getElementById("dateEcheance").value,
            "dateFin": document.getElementById("dateFin").value,
            "coassurance": document.getElementById("coassurance").checked,
            "programmeInternational": document.getElementById("programmeInternationale").checked,
            "participationResultat": document.getElementById("participationResultat").checked,
            "lieuDepart": document.getElementById("depart").value,
            "lieuArrivee": document.getElementById("arrivee").value,

            // Cotisations
            "typeContrat": contrat.type !== "TEMPORAIRE" ? document.querySelector('input[name="typeContrat"]:checked').value : "",
            "ca": verifierAccesValeur("CA", ['typeContrat-chiffreAffaires']),
            "cotIrred": verifierAccesValeur("cotisationIrreductible", ['typeContrat-chiffreAffaires']),
            "capitalMax": document.getElementById('capitalMax').value,
            "capitalColis": document.getElementById('capitalColis').value,
            "capitalExped": document.getElementById('capitalExped').value,
            "capitalTPPC": verifierAccesValeur("capitalTPPC", ['TPPC']),
            "capitalExpo": verifierAccesValeur("capitalExpo", ['marchandise-exposition']),

            "franchiseTransport": document.getElementById('franchiseTransport').value,
            "franchiseExpo": verifierAccesValeur("franchiseExpo", ['marchandise-exposition']),
            "franchiseTPPC": verifierAccesValeur("franchiseTPPC", ['TPPC']),

            "tauxCotRO": verifierAccesValeur("tauxCotRO", ['typeContrat-chiffreAffaires']),
            "tauxCotRG": verifierAccesValeur("tauxCotRG", ['typeContrat-chiffreAffaires', 'rg-auto']),
            "cotProvRO": contrat.type !== "TEMPORAIRE" ? verifierAccesValeur('cotProvRO', ['rg-auto', 'typeContrat-chiffreAffaires']) : document.getElementById('cotProvRO').value,
            "cotProvRG": contrat.type !== "TEMPORAIRE" ? verifierAccesValeur('cotProvRG', ['rg-auto', 'typeContrat-chiffreAffaires']) : document.getElementById('cotProvRG').value,
            'cotAnnuelleHT': contrat.type !== "TEMPORAIRE" ? verifierAccesValeur('cotAnnuelleHT', ['typeContrat-chiffreAffaires']) : "",
            'cotAnnuelleTTC': contrat.type !== "TEMPORAIRE" ? verifierAccesValeur('cotAnnuelle', ['typeContrat-chiffreAffaires']) : "",
            'cotRO': document.getElementById('cotRO').value,
            'cotRG': document.getElementById('cotRG').value,
            'cotComptant': document.getElementById('cotComptant').value
            // Vous pouvez ajouter d'autres données pour la saisie dans la collection FAC ici
        }

        const response = await fetch(`/fac/create`, {
            method: 'POST',
            body: JSON.stringify(body),
            headers: {
                'Content-Type': 'application/json',
            },
        });

        const data = await response.json();

        if (data.valid) {
            const idProjet = data.fac.id;

            // Mettre à jour le champ "fac" dans le contrat avec l'ID de la nouvelle saisie
            const responseContratEnCours = await fetch(`/contrat/update/${contrat.produit}/${contrat.id}/${idProjet}`, {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json',
                },
            });

            const dataContratEnCours = await responseContratEnCours.json();

            if (dataContratEnCours.valid) {
                // Obtenir la date actuelle au format "JJ/MM/AAAA"
                const currentDate = new Date();
                const day = String(currentDate.getDate()).padStart(2, '0');
                const month = String(currentDate.getMonth() + 1).padStart(2, '0'); // Les mois sont indexés à partir de 0, donc +1
                const year = currentDate.getFullYear();
                const formattedDate = `${day}/${month}/${year}`;

                //Obtenir l'user
                const token = localStorage.getItem('jwtToken');
                const decoded = jwt_decode(token);
                const userFirstName = decoded.userFirstName;
                const userLastName = decoded.userLastName;

                // Obtenir l'heure actuelle au format "HHhMM"
                const hours = String(currentDate.getHours()).padStart(2, '0');
                const minutes = String(currentDate.getMinutes()).padStart(2, '0');
                const seconds = String(currentDate.getSeconds()).padStart(2, '0');
                const formattedTime = `${hours}:${minutes}:${seconds}`;
                const nom = userLastName;
                const prenom = userFirstName;

                // Mettre à jour le champ "historique" dans le contrat avec les nouvelles données d'historique
                const historiqueData = [
                    {
                        "type": contrat.type,
                        "date": formattedDate,
                        "heure": formattedTime,
                        "produit": "FAC",
                        "id": idProjet,
                        "nom": nom,
                        "prenom": prenom,
                    }
                ];

                const responseHistoriqueUpdate = await fetch(`/contrat/update/historique/${contrat.id}`, {
                    method: 'POST',
                    body: JSON.stringify({historiqueData}),
                    headers: {
                        'Content-Type': 'application/json',
                    },
                });

                const dataHistoriqueUpdate = await responseHistoriqueUpdate.json();

                if (dataHistoriqueUpdate.valid) {
                    ///////////////////////////////////////////////////////////////////////////////////////////////////////
                    /// TODO DEBUT Génération fichier à l'enregistrement A RETIRER QUAND MODE CONTRAT
                    const numParcours = getNumParcoursFromURL();
                    let filename;

                    // Envoi de la requête POST au serveur pour générer le projet
                    fetch(`/generate/fac/projet/${numParcours}`, {
                        method: 'POST',
                        headers: {
                            'Content-Type': 'application/json',
                        },
                    })
                    .then(response => {
                        if (!response.ok) {
                            throw new Error('Erreur réseau ou serveur');
                        }

                        const disposition = response.headers.get('content-disposition');
                        filename = disposition.split(';')[1].trim().split('=')[1];

                        return response.blob(); // On attend une réponse sous forme de blob pour un fichier
                    })
                    .then(blob => {
                        // Crée un URL pour le blob
                        const url = window.URL.createObjectURL(blob);
                        // Crée un élément a temporaire pour simuler un clic pour téléchargement
                        const a = document.createElement('a');
                        a.href = url;
                        a.download = filename; // Nomme le fichier téléchargé
                        document.body.appendChild(a); // Ajoute l'élément au document
                        a.click(); // Simule un clic sur l'élément pour déclencher le téléchargement
                        window.URL.revokeObjectURL(url); // Nettoie l'URL objet
                        a.remove(); // Supprime l'élément a du document

                        window.location.href = `/navParcours?numParcours=${getNumParcoursFromURL()}&submenu=projet`;
                    })
                    .catch(error => console.error('Erreur lors de la génération du projet:', error));
                    /// TODO FIN Génération fichier à l'enregistrement A RETIRER QUAND MODE CONTRAT
                    ///////////////////////////////////////////////////////////////////////////////////////////////////////

                    // TODO NE PAS OUBLIER LE HREF QUI EST DANS LE GEN ACTUELLEMENT
                    // window.location.href = `/navParcours?numParcours=${getNumParcoursFromURL()}&submenu=projet`;
                } else {
                    console.log('Echec lors de la mise à jour de l\'historique du contrat :', dataHistoriqueUpdate.message);
                }
            } else {
                console.log('Echec lors de la mise à jour du champ "enCours" dans le contrat :', dataContratEnCours.message);
            }
        } else {
            console.log('Echec lors de la création de la saisie dans la collection FAC :', data.message);
        }
    }

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