//! Librairie JS Globale
//! D6SOFT

function showModal(idModalElement) {
  idModalElement.style.display = "block"
  idModalElement.className += "show"
}

function hideModal(idModalElement) {
  idModalElement.style.display = "none"
  idModalElement.className += idModalElement.className.replace("show", "")
}

function showNotification(leTitre, leMessage, leTheme = "info", laPosition = "nfc-bottom-right") {
  window.createNotification({
    theme: leTheme,    // success, info, warning, error, and none
    positionClass: laPosition, // nfc-top-left, nfc-bottom-right, nfc-bottom-left, nfc-top-right
  })({
    title: leTitre,
    message: leMessage
  });
}

//! Gestion de l'animation de chargement lors de requêtes AJAX
const loader = document.querySelector("#loadingDiv");

function showLoading() {
  loader.classList.add("display");
}

function hideLoading() {
  loader.classList.remove("display");
}

function convertMySQLDateToFrenchDate(mysqlDate) {
  const date = new Date(mysqlDate); // créer un objet Date à partir de la date MySQL
  let day = date.getDate(); // extraire le jour du mois
  if (day < 10) {
    day = '0' + day; // ajouter un zéro devant si le jour est inférieur à 10
  }
  let month = date.getMonth() + 1; // extraire le mois (ajouter 1 car les mois commencent à 0)
  if (month < 10) {
    month = '0' + month; // ajouter un zéro devant si le mois est inférieur à 10
  }
  const year = date.getFullYear(); // extraire l'année
  return day + '/' + month + '/' + year; // retourner la date au format français
}

function convertFrenchDateToMySQLDate(frenchDate) {
  var parts = frenchDate.split('/'); // séparer la date en jour, mois et année
  var date = new Date(parts[2], parts[1] - 1, parts[0]); // créer un objet Date à partir de la date française
  return date.toISOString().slice(0, 19).replace('T', ' '); // retourner la date au format MySQL
}

function controlFrenchDate(laDateSaisie) {
  const reg = new RegExp("^[0-9]{2}/[0-9]{2}/[0-9]{4}$");
  if (reg.test(laDateSaisie)) {
    // Convertir la chaîne de caractères en un objet Date
    const parts = laDateSaisie.split('/');
    const laDate = new Date(parts[2], parts[1] - 1, parts[0]);

    if (laDate instanceof Date && !isNaN(laDate)) {
      // la date est correcte, on la formate en JJ/MM/AAAA
      const formattedDate = ('0' + laDate.getDate()).slice(-2) + '/' + ('0' + (laDate.getMonth() + 1)).slice(-2) + '/' + laDate.getFullYear();
      return formattedDate;
    } else {
      return false;
    }
  } else {
    return false;
  }
}

function isDateValid(inputDate) {
  const dateObj = new Date(inputDate);
  return !isNaN(dateObj.getTime());
}

function parseFloatFromPercentageString(str) {
  // Supprimer les espaces en début et fin de chaîne
  str = str.trim();
  // Supprimer le caractère de pourcentage en fin de chaîne
  str = str.replace(/%$/, '');
  // Convertir la chaîne en nombre float
  var value = parseFloat(str);
  return value;
}

//! Affiche un montant avec 2 décimales et un séparateur de milliers
function formatAmount(amount) {
  const amountNumber = parseFloat(amount);
  const amountFormat = amountNumber.toFixed(2).replace(/\B(?=(\d{3})+(?!\d))/g, " ");
  return amountFormat;
}

//! affiche un effet blink sur les inputs qui ont atteint leur maxLength (seulement pour ceux qui on un attribut maxlength)
const inputs = document.querySelectorAll("input[type='text'][maxlength], input[type='number'][maxlength]");
inputs.forEach((input) => {
  const maxLength = input.maxLength;

  input.addEventListener("input", function () {
    if (input.value.length >= maxLength) {
      input.classList.add("blink-input");
      setTimeout(() => input.classList.remove("blink-input"), 800);
    }
  });
});

//! lit les données d'un cookie ($_SESSION) et les retourne sous forme d'objet
function getCookie(name) {
  const value = `; ${document.cookie}`;
  const parts = value.split(`; ${name}=`);
  if (parts.length === 2) return parts.pop().split(';').shift();
}