// Événement de récupération du parcours souscripteur à partir de l'id
document.addEventListener('DOMContentLoaded', function () {
  /* ----------  Init  ------------ */
  const token = localStorage.getItem('jwtToken');

  if (token) {
    const decoded = jwt_decode(token);
    const userFirstName = decoded.userFirstName;
    const userLastName = decoded.userLastName;
    const userMatricule = decoded.userMatricule;

    document.getElementById("firstNameItem").innerHTML = userFirstName;
    document.getElementById("lastNameItem").innerHTML = userLastName;
    document.getElementById("userMatricule").innerHTML = userMatricule;
  }

  /* ----------  EVENNEMENT  ------------ */
  // Écoute de l'événement du bouton nouveau parcours
  document.getElementById('nouveauParcoursBtn').addEventListener('click', function (event) {
    // Empêche le comportement par défaut du formulaire
    event.preventDefault();

    const userMatricule = document.getElementById('userMatricule').innerHTML;

    //Envoie de la requete pour creer le nouveau parcours et l'attribuer au souscripteur
    (async () => {
      try {
        const data = await fetchWithJson(`/parcours/create/${userMatricule}`, 'POST');

        if (data.valid) {
          window.location.href = `/parcours?numParcours=${data.numParcours}`;
        } else {
          console.log("Erreur dans la création d'un nouveau parcours")
        }
      } catch (error) {
        console.error("Erreur serveur lors de la création d'un nouveau parcours :", error);
      }
    })();
  });

  // Ecoute de l'événement 'input' au champ numParcours
  document.getElementById('numParcours').addEventListener('input', function () {
    validateField('numParcours', true);
    updateSubmitButtonState('parcoursForm');
  });

  // Fonction de génération de projet
  document.getElementById('btnGenCP').addEventListener('click', function () {
    const numParcours = document.getElementById('numParcours').value;
    const produit = document.getElementById('produit').innerHTML.replace(/\s/g, '');
    let filename;

    console.log("{", produit, "}")

    // Envoi de la requête POST au serveur pour générer le projet
    fetch(`/generate/${produit}/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
    })
    .catch(error => console.error('Erreur lors de la génération du projet:', error));
  });

  // Écoute de l'événement de soumission du formulaire
  document.getElementById('parcoursForm').addEventListener('submit', function (event) {
    // Empêche le comportement par défaut du formulaire
    event.preventDefault();

    // Supression mémoire tampon Client/Inter
    sessionStorage.removeItem('tmp');

    const numParcours = document.getElementById('numParcours').value;

    // Envoi de la requête pour avoir le parcours
    (async () => {
      try {
        await loadParcours(numParcours);

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

        if (parcours) {
          // Affiche un modal si le parcours est valide
          const elem = document.getElementById('goodParcoursModal');
          const instance = M.Modal.getInstance(elem);

          const contratId = parcours?.["@expand"]?.contrat?.id || null;
          await loadContrat(contratId);
          const contrat = JSON.parse(sessionStorage.getItem('contrat'));

          const client = contrat?.["@expand"]?.client || null;
          const intermediaire = contrat?.["@expand"]?.intermediaire || null;

          let produit = parcours["@expand"].contrat.produit
  
          const produitObj = contrat?.["@expand"]?.enCours || null;
          const tarif = produitObj?.["@expand"]?.tarif || null;
          const projet = produitObj?.["@expand"]?.projet || null;
  

          if (client) { document.getElementById("sectionClient").style.display = "block"; }
          if (intermediaire) { document.getElementById("sectionIntermediaire").style.display = "block"; }
          

          if (produit == "RC") {        //A MODIFIER UNE FOIS QUE RC SERA ADAPTé AU PARCOURS
            document.getElementById('btnGenTarif').disabled = true;
            if (Object.keys(contrat?.["@expand"]?.enCours).length > 1) {
              document.getElementById('btnGenCP').disabled = false;
            } else {
              document.getElementById('btnGenCP').disabled = true;
            }
          } else {
              // Enable / disable bouton generate project
              if (parcours["@expand"].contrat.client != '' && parcours["@expand"].contrat.intermediaire != '' && produitObj != undefined && projet != null) {
                  document.getElementById('btnGenCP').disabled = false;
              } else {
                  document.getElementById('btnGenCP').disabled = true;
              }

              // Enable / disable bouton generate déclinaison
              if (parcours["@expand"].contrat.client != '' && parcours["@expand"].contrat.intermediaire != '' && produitObj != undefined && tarif != null) {
                  document.getElementById('btnGenTarif').disabled = false;
              } else {
                  document.getElementById('btnGenTarif').disabled = true;
              }
          }

          // Gestion des informations du parcours
          document.getElementById('displayedNumParcours').innerText = numParcours;
          document.getElementById('dateCreaParcours').innerText = parcours.created
            ? new Date(parcours.created).toLocaleDateString('fr-FR', { day: 'numeric', month: 'long', year: 'numeric' })
            : 'N/A';
          document.getElementById('dateModiParcours').innerText = parcours.updated
            ? new Date(parcours.updated).toLocaleDateString('fr-FR', { day: 'numeric', month: 'long', year: 'numeric' })
            : 'N/A';

          const dernierUtilisateur = parcours["@expand"]?.dernierUtilisateur;
          document.getElementById('souscripteurParcours').innerText = dernierUtilisateur
            ? `${dernierUtilisateur.matricule}, ${dernierUtilisateur.prenom} ${dernierUtilisateur.nom}`
            : 'Information non disponible';

          document.getElementById('updateParcours').addEventListener('click', function () {
            window.location.href = `/navParcours?numParcours=${numParcours}&submenu=client`;
          });

          // Gestion des informations du contrat
          if (contrat) {
            document.getElementById('numContrat').innerText = (contrat.numContrat) ? contrat.numContrat : 'N/A';
            document.getElementById('numSaisine').innerText = (contrat.numSaisine) ? contrat.numSaisine : 'N/A';
            document.getElementById('produit').innerText = (contrat.produit) ? contrat.produit : 'N/A';
            document.getElementById('type').innerText = (contrat.type) ? contrat.type : 'N/A';
          }

          // Gestion des informations client
          if (client) {
            document.getElementById('numClient').innerText = (client.numClient) ? client.numClient : 'N/A';
            document.getElementById('nomClient').innerText = (client.nom) ? client.nom : 'N/A';
            document.getElementById('adresseClient').innerText = (client.adresse || client.codePostal || client.ville)
              ? `${client.adresse}, ${client.codePostal}, ${client.ville}`
              : 'N/A';
            document.getElementById('mailClient').innerText = (client.mail) ? client.mail : 'N/A';
            document.getElementById('noteClient').innerText = (client.noteFinanciere) ? client.noteFinanciere : 'N/A';
          }

          // Gestion des informations de l'intermédiaire
          if (intermediaire) {
            document.getElementById('numPortefeuille').innerText = (intermediaire.numPortefeuille) ? intermediaire.numPortefeuille : 'N/A';
            document.getElementById('numOrias').innerText = (intermediaire.numOrias) ? intermediaire.numOrias : 'N/A';
            document.getElementById('typeIntermediaire').innerText = (intermediaire.type) ? intermediaire.type : 'N/A';
            document.getElementById('nomIntermediaire').innerText = (intermediaire.nom) ? intermediaire.nom : 'N/A';
            document.getElementById('adresseIntermediaire').innerText = (intermediaire.adresse || intermediaire.codePostal || intermediaire.ville)
              ? `${intermediaire.adresse}, ${intermediaire.codePostal}, ${intermediaire.ville}`
              : 'N/A';
            document.getElementById('numTelephoneIntermediaire').innerText = (intermediaire.numTelephone) ? intermediaire.numTelephone : 'N/A';
            document.getElementById('mailIntermediaire').innerText = (intermediaire.mail) ? intermediaire.mail : 'N/A';
          }

          instance.open();
        } else {
          // Affiche un modal si le parcours est invalide
          const elem = document.getElementById('wrongParcoursModal');
          const instance = M.Modal.getInstance(elem);
          const admins = JSON.parse(sessionStorage.getItem('admins'));

          // Met à jour le parcours affiché dans le modal
          document.getElementById('displayedNumParcoursWrong').innerText = numParcours;

          const adminListElement = document.getElementById('adminList');
          adminListElement.innerHTML = "";

          admins.items.forEach(admin => {
            adminListElement.innerHTML +=
              `<tr>
                <td>${admin.matricule}</td>
                <td>${admin.nom}</td>
                <td>${admin.prenom}</td>
                <td>${admin.mail}</td>
              </tr>`
          })

          instance.open();
        }
      } catch (error) {
        console.error("Erreur lors de la récupération des informations du parcours :", error);
      }
    })();
  });

  updateSubmitButtonState('parcoursForm');
});