/////////////////////////////////////////////////
// APPELS DES MODULES
/////////////////////////////////////////////////
const moment = require('moment');
const path = require("path");
const axios = require('axios');


/////////////////////////////////////////////////
// APPELS DES MODULES PERSOS
/////////////////////////////////////////////////
// loggings
const logger = require("../public/js/app/logger_wuzuki");
// Envoie mail
const envoie_mail = require("../modules/envoie_mail");
// DB
const { connect_DB_promise } = require('../modules/db/databaseconnect');

////////////////////////////////////////////////////
// FILE NAME
////////////////////////////////////////////////////
const filename = path.parse(__filename).base;

/////////////////////////////////////////////////
// GOOGLE SHEET PARAMETERS
/////////////////////////////////////////////////
const { GoogleSpreadsheet } = require('google-spreadsheet');
const GS_creds = require('../inscriptionsafps-53b60452f63d.json');
const { error } = require("console");
// Initialize the sheet - doc ID is the long id in the sheets URL
const GS_contact = new GoogleSpreadsheet(process.env.gsheet_contact);



/////////////////////////////////////////////////
// ENREGISTREMENT DES INFORMATIONS SAISIES
// ENVOIE MAIL VERS AFPS
// AJOUT DANS GOOGLE SHEET CONTACTS AFPS
/////////////////////////////////////////////////
const post_form_envoie_message = async function(req, res){
  logger.info("======================================");
  logger.info("======== FUNCTION post_form_envoie_message ==========");
  logger.info("======================================");

  moment.locale('fr');
  let now = moment().format("DD/MM/YYYY");

  /////////////////////////////////////////////////
  // RÉCUPÉRATION DES DONNÉES DU FORMULAIRE DANS LA SESSION EN COURS et dans la tableau DATA
  /////////////////////////////////////////////////

  // VÉRIFIER SI CAPTCHA A BIEN ÉTÉ REMPLI
  const token_captcha = req.body['g-recaptcha-response'];
  if (!token_captcha) {
    logger.info("Captcha non rempli", { numsession: req.session.id });
    req.session.affiche_err_1 = 'Captcha non rempli.';
    return res.redirect('/wuzuki/envoie_message');
  }

  // un tableau : pour récupérer en même temps les informations saisies dans un tableau
  let data = [];
  
  // Boucle sur les noms des champs
  // ajout des infos dans le tableau
  ['nom', 'prenom', 'mail', 'commentaire'].forEach(field => {
    req.session[field] = req.body[field];
    data.push({[field] : req.body[field]});
    logger.info("#0 " + field + " = " + req.body[field], { numsession: req.session.id, label: filename});
  });
  console.log("data = ", data);


  /////////////////////////////////////////////////
  // ENVOIE MAIL AFPS
  // AJOUT DANS GOOGLE SHEET CONTACTS AFPS
  /////////////////////////////////////////////////

  try {

    // CAPTCHA V3
    const response_captcha = await axios.post(`https://www.google.com/recaptcha/api/siteverify`, null, {
      params: {
          secret: process.env.g_captcha,
          response: token_captcha
      }
    });
    const response_captcha_data = response_captcha.data;
    console.log("response_captcha_data = ", response_captcha_data.success);
    logger.info("#0 response_captcha_data : SUCCESS = " + response_captcha_data.success + " / score = " + response_captcha_data.score, { numsession: req.session.id, label: filename});

    // CAPTCHA V3

    if (response_captcha_data.success && response_captcha_data.score >= 0.8) {
      /////////////////////////////////////////////////
      // ENVOIE MAIL À L'AFPS
      var mail_objet = `[WUZUKI] DEMANDE DE CONTACT DEPUIS LE SITE INTERNET - ${req.session.nom}`;
      var mail_html = `<p>Bonjour,</p><p>Une personne a rempli le <strong>formulaire de contact du site Internet de l'AFPS.</strong><br>Voici ses coordonnées et son message :</p><br><p><span style='color: #E73058;'>NOM : </span>${req.session.nom}</p><p><span style='color: #E73058;'>PRÉNOM : </span>${req.session.prenom}</p><p><span style='color: #E73058;'>MAIL : </span>${req.session.mail}</p><p><span style='color: #E73058;'>MESSAGE :</span><br>${req.session.commentaire}</p><br><p>WUZUKI, programme du site Internet de l'AFPS</p>`;
      var mailOptions = {
          from: 'afps.inscription@gmail.com',
          to: 'afpedagogiesuzuki@gmail.com',
          cc: 'supplies@juliechaumard.paris',
          subject: mail_objet,
          html: mail_html
      };
      await envoie_mail.envoie_mail(mailOptions);

      /////////////////////////////////////////////////
      // AJOUT DE LA DEMANDE DE CONTACT DANS GOOGLE SHEET CONTACTS AFPS
      await GS_contact.useServiceAccountAuth(GS_creds);
      await GS_contact.loadInfo();
      let GS_sheet_contact = GS_contact.sheetsByTitle['demande_contact'];
      await GS_sheet_contact.addRows (
        [
          {
            provenance: "site internet afps",
            cta: 'bouton "Nous Contacter"',
            date: now,
            nom: req.session.nom,
            prenom: req.session.prenom,
            mail: req.session.mail,
            message: req.session.commentaire,
            mail_envoye: 'A afpedagogiesuzuki@gmail.com'
          }
        ]
      );
      logger.info("AJOUT GOOGLESHEET FIN", { numsession: req.session.id, label: filename});

      req.session.affiche_err_1 = "Votre message à bien été envoyé à l'Association Française pour la Pédagogie Suzuki.";
      return res.redirect('/wuzuki/envoie_message');

    } else {
        // Les informations saisies sont vides
        logger.info("Il y a un problème avec la saisie des informations du formulaire", { numsession: req.session.id });
        req.session.affiche_err_1 = 'Il y a un problème avec la saisie des informations du formulaire, veuillez recommencer.';
        return res.redirect('/wuzuki/envoie_message');
    }

  } catch (error) {
      // Echec de connection à la BD
      logger.error("Il y a un problème système post_form_envoie_message : " + error, { numsession: req.session.id });
      req.session.affiche_err_1 = '"Il y a un problème système, veuillez recommencer, "' + error;
      return res.redirect('/wuzuki/envoie_message');
  }
}

/////////////////////////////////////////////////
// EXPORT DE MODULE POUR QU'IL SOIT LU DANS LES AUTRES FICHIERS JS
/////////////////////////////////////////////////
module.exports = {
    post_form_envoie_message
  }  