// Événement de vérification d'authentification
document.addEventListener('DOMContentLoaded', function () {
  // Vérification de la page sur laquelle nous sommes
  if (window.location.pathname !== '/auth') {
    // Récupération du token JWT du localStorage
    const token = localStorage.getItem('jwtToken');

    // Si pas de token, redirige vers la page d'authentification
    if (!token) {
      window.location.replace('/auth');
    } else {
      // Si un token existe, vérification de sa validité
      fetch('/auth/verifyToken', {
        method: 'POST',
        headers: {
          'Authorization': 'Bearer ' + token
        }
      })
      .then(res => res.json())
      .then(data => {
        
        // Si le token n'est pas valide, redirige vers la page d'authentification
        if (!data.valid) {
          localStorage.removeItem('jwtToken');
          window.location.replace('/auth');
        }
      })
      .catch(error => {
        console.error('Error:', error);
      });
    }
  }
});

// Événement du bouton déconnexion
document.addEventListener('DOMContentLoaded', function (event) {
  // Empêche le comportement par défaut du formulaire
  event.preventDefault();

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

  if (window.location.pathname === '/auth') {
    logoutBtn.style.display = 'none';
  } else {
    logoutBtn.addEventListener('click', function () {
      // Suppression du token JWT du localStorage et redirection
      localStorage.removeItem('jwtToken');
      window.location.replace('/auth');
    });
  }
});

// Événement d'initialisation des Materialize content
document.addEventListener('DOMContentLoaded', function () {
  // Init dropdown
  var sidenav = document.querySelectorAll('.sidenav');
  M.Sidenav.init(sidenav);

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

// Événement condition de groupe pour les menus
document.addEventListener('DOMContentLoaded', function () {
  const token = localStorage.getItem('jwtToken');

  if (token) {
    const decoded = jwt_decode(token);
    const userAuthGroupe = decoded.userAuthGroupe;

    const reportingItem = document.getElementById("reportingSidenavSelect");
    const adminItem = document.getElementById("adminSidenavSelect");

    // Cache par défaut
    reportingItem.style.display = 'none';
    adminItem.style.display = 'none';

    if (userAuthGroupe === 'MANAGER' || userAuthGroupe === 'ADMIN') {
      reportingItem.style.display = 'block';
    }

    if (userAuthGroupe === 'ADMIN') {
      adminItem.style.display = 'block';
    }
  }
});

// Fonction pour extraire le numéro de parcours de l'URL
function getNumParcoursFromURL() {
  const urlParams = new URLSearchParams(window.location.search);

  return urlParams.get('numParcours');
}


// Fonction pour extraire le sous-menu de l'URL
function getSubmenuFromURL() {
  const urlParams = new URLSearchParams(window.location.search);

  return urlParams.get('submenu');
}

// Fonction pour vérifier si une valeur est nulle ou non définie
function isNullOrUndefined(value) {
  return value === null || value === undefined;
}

// Fonction pour éviter la duplication du code fetch
async function fetchWithJson(url, method, body = null) {
  const options = {
    method: method,
    headers: { 'Content-Type': 'application/json' },
  };
  if (body) options.body = JSON.stringify(body);

  const response = await fetch(url, options);
  if (!response.ok) throw new Error('Réseau ou erreur serveur');

  return await response.json();
}

// Fonction de load du parcours en session storage
async function loadParcours(numParcours) {
  try {
    const data = await fetchWithJson(`/parcours/read/${numParcours}`, 'GET');

    if (data.valid) {
      sessionStorage.setItem('parcours', JSON.stringify(data.parcours));
    } else {
      sessionStorage.setItem('parcours', null);
      sessionStorage.setItem('admins', JSON.stringify(data.admins));
      console.log("Parcours introuvable");
    }
  } catch (error) {
    console.error("Erreur lors de la récupération des informations parcours :", error);
  }
}

// Fonction générique de toggle
function toggler(btn, div) {
  if (document.getElementById(btn).checked) {
    document.getElementById(div).style.display = 'block';
  } else {
    document.getElementById(div).style.display = 'none';
  }
}

// Fonction de load du parcours en session storage
async function loadContrat(idContrat) {
  try {
    const data = await fetchWithJson(`/contrat/read/id/${idContrat}`, 'GET');

    if (data.valid) {
      sessionStorage.setItem('contrat', JSON.stringify(data.contrat));
    } else {
      sessionStorage.setItem('contrat', null);
      console.log("Contrat introuvable");
    }
  } catch (error) {
    console.error("Erreur lors de la récupération des informations contrat :", error);
  }
}