/////////////////////////////////////////////////
// LOGGING
/////////////////////////////////////////////////
const logger = require("../../public/js/app/logger_concert");

/////////////////////////////////////////////////
// APPELS DES MODULES
/////////////////////////////////////////////////
const path = require("path");
const fs = require("fs");
// CALCUL DE DATE
const moment = require('moment');
// ENVOIE MAIL GOOGLE MAIL
const nodemailer = require('nodemailer');
// CONNECTION BASE DE DONNÉES
const mysql = require('mysql2');
const mysql_promise = require('mysql2/promise');

/////////////////////////////////////////////////
// GOOGLE SHEET PARAMETERS
/////////////////////////////////////////////////
const { GoogleSpreadsheet } = require('google-spreadsheet');
const GS_creds = require('../../inscriptionsafps-53b60452f63d.json');
const { error } = require("console");
// Fichier Google Sheet "afps_concert_annuel" (Mon Drive/inscriptions/base_donees)
// doc ID is the long id in the sheets URL
const GS_concert = new GoogleSpreadsheet(process.env.gsheet_concertannuel);

/////////////////////////////////////////////////
// APPELS DES FONCTIONS
/////////////////////////////////////////////////
const sleep = require("./../../modules/sleep");
const envoie_mail = require("./../../modules/envoie_mail");

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

////////////////////////////////////////////////////
// CONNECTION DB
////////////////////////////////////////////////////
async function connect_DB_promise() {
    return db_connection_promise = await mysql_promise.createConnection({
        host: process.env.db_connection_host,
        port: process.env.db_connection_port,
        user: process.env.db_connection_user,
        password: process.env.db_connection_password,
        database: process.env.db_connection_database
    });
}

/////////////////////////////////////////////////
// PAGE 3 ter
// DOMAIN/concert/listeattente
// AFFICHAGE DE LA PAGE DE SAISIE POUR LA LISTE D'ATTENTE
// D'UN CONCERTISTE
/////////////////////////////////////////////////

const inscription_listeattente = async function (req, res) {

    logger.info("======================================", { label: filename });
    logger.info("======== FUNCTION inscription_listeattente ==========", { label: filename });
    logger.info("======================================", { label: filename });

    // VARIABLES
    moment.locale('fr');
    let now = moment().format("YYYY-MM-DD HH:mm:ss");

    function affiche_page_erreur() {
        ////////////////////////////////////////////////////
        // AFFIHER LA PAGE ERREUR
        // AFFICHAGE DES ERREURS
        ////////////////////////////////////////////////////

        if (req.session.err_mail_form_adhesion_1) {
            res.locals.err_mail_form_adhesion_1 = req.session.err_mail_form_adhesion_1;
            res.locals.err_mail_form_adhesion_2 = req.session.err_mail_form_adhesion_2;
            res.locals.err_mail_form_adhesion_3 = req.session.err_mail_form_adhesion_3;
            // on supprime le contenu après affichage
            req.session.err_mail_form_adhesion_1 = undefined;
            req.session.err_mail_form_adhesion_2 = undefined;
            req.session.err_mail_form_adhesion_3 = undefined;
        }
        res.render('concert/page_templates/erreur');
    };
   
    /////////////////////////////////////////////////
    // SI IDENTIFIANT PERDU
    if (req.session.identifiant === undefined) {
        logger.info("IDENTIFIANT PERDU", { numsession: req.session.id });
        req.session.err_mail_form_adhesion_1 = "Session expirée, veuillez recommencer";
        affiche_page_erreur();
    } else {
        ///////////////////////////////////////////////////
        // ON RÉCUPÈRE LES INFOS SAISIE DANS LE FORMULAIRE
        req.session.association_suzuki = req.body.association_suzuki;
        req.session.adherent_nom = req.body.adherent_nom;
        req.session.adherent_prenom = req.body.adherent_prenom;
        req.session.adherent_telephone_mobile = req.body.adherent_telephone_mobile;
        req.session.adherent_mail = req.body.adherent_mail;
        req.session.eleve_nom = req.body.eleve_nom;
        req.session.eleve_prenom = req.body.eleve_prenom;
        req.session.eleve_age = req.body.eleve_age;
        req.session.eleve_instrument = req.body.eleve_instrument;
        req.session.eleve_cahier = req.body.eleve_cahier;
        req.session.eleve_piece = req.body.eleve_piece;
        req.session.eleve_prof_nom = req.body.eleve_prof_nom;
        req.session.eleve_prof_mail = req.body.eleve_prof_mail;
    
        logger.info("AJOUT DE L'ÉLÈVE IDENTIFIANT : " + req.session.identifiant, { numsession: req.session.id, label: filename});
        logger.info("AJOUT DE L'ÉLÈVE NOM PRENOM : " + req.session["eleve_nom"] + " " + req.session["eleve_prenom"], { numsession: req.session.id, label: filename});
    
        // AJOUT CONCERTISTE DANS LA BASE DE DONNÉES
        try {
            //Connexion
            let db_connection_promise = await connect_DB_promise();

            // AJOUT CONCERTISTE
            champs = "date_inscription, saison, identifiant, association_suzuki, adherent_nom, adherent_prenom, adherent_telephone_mobile, adherent_mail, concertiste_nom, concertiste_prenom, concertiste_age, concertiste_intrument, concertiste_cahier, concertiste_piece, concertiste_prof_nom, concertiste_prof_mail";
            values = '"'+ now + '","2025/2026"' + ',"' + req.session.identifiant + '","' + req.session.association_suzuki + '","' + req.session.adherent_nom + '","' + req.session.adherent_prenom + '","' + req.session.adherent_telephone_mobile + '","' + req.session.adherent_mail + '","' + req.session.eleve_nom + '","' + req.session.eleve_prenom + '","' + req.session.eleve_age + '","' + req.session.eleve_instrument + '","' + req.session.eleve_cahier + '","' + req.session.eleve_piece + '","' + req.session.eleve_prof_nom + '","' + req.session.eleve_prof_mail + '"';

            sql = 'INSERT INTO ca_liste_attente (' + champs + ') VALUES (' + values + ')';
            logger.info("REQUETE SQL ca_liste_attente : " + sql , { numsession: req.session.id, label: filename});

            const [results, fields] = await db_connection_promise.execute(sql);
            logger.info("LISTE ATTENTE Row ID added : " + results.insertId, { numsession: req.session.id, label: filename});

        }  catch (error) {
            // Echec de connection à la BD
            logger.error("Il y a un problème avec la connection à la base de données! : " + error, { numsession: req.session.id });
            req.session.err_mail_form_adhesion_1 = '"Il y a un problème système connexion base de données, veuillez recommencer, "' + error;
            affiche_page_erreur();
        }

        // AJOUT CONCERTISTE DANS LA GOOGLE SHEET
        try {
            await GS_concert.useServiceAccountAuth(GS_creds);
            await GS_concert.loadInfo();
            //console.log("GS_concert = ", GS_concert);
            const GS_concert_liste_attente = GS_concert.sheetsByTitle['liste_attente'];

            //console.log("GS_concert_liste_attente = ", GS_concert_liste_attente);
           
             
            const ajout_gs_adherent = await GS_concert_liste_attente.addRows (
                [
                    {
                        saison: "2025/2026",
                        identifiant: req.session.identifiant,
                        association_suzuki: req.session.association_suzuki,
                        date_inscription: now,
                        adherent_nom: req.session.adherent_nom,
                        adherent_prenom: req.session.adherent_prenom,
                        adherent_telephone_mobile: "'" + req.session.adherent_telephone_mobile,
                        adherent_mail: req.session.adherent_mail,
                        concertiste_nom: req.session.eleve_nom,
                        concertiste_prenom: req.session.eleve_prenom,
                        concertiste_age: req.session.eleve_age,
                        concertiste_intrument: req.session.eleve_instrument,
                        concertiste_cahier: req.session.eleve_cahier,
                        concertiste_piece: req.session.eleve_piece,
                        concertiste_prof_nom: req.session.eleve_prof_nom,
                        concertiste_prof_mail: req.session.eleve_prof_mail,
                        date_maj_gsheet: now
                    }
                ]
            );




            //////////////////////////
            // ENVOI MAIL À L'ADHÉRENT
            
            mail_objet = 'AFPS - CONCERT UNESCO 2024 - AJOUT LISTE ATTENTE - ' + req.session.identifiant;

            mail_html = "<p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'>Cher(e) adhérent(e),<br></p><p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'>L'élève est inscrit en liste d'attente pour le Concert national Unesco 2024 organisé par l'Association Française pour la Pédagogie Suzuki.";
            mail_html += "<br>";
            mail_html += '<p style="color:#E73058;font-size: 13pt; font-family: Arial; text-decoration: none;"><strong>RÉCAPITULATIF</strong></p>';
            mail_html += "<p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'><strong>Identifiant Suzuki : </strong>" + req.session.identifiant;
            mail_html += "<p style='font-size: 9pt; font-family: Arial; font-style: italic; color: #454343; text-decoration: none;'>Les concertistes s'engagent à être présents les 2 journées du 20 et 21 avril 2024.</p>";
            mail_html += "<p style='font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;'>Nom : " + req.session.eleve_nom + " " + req.session.eleve_prenom + " - " + req.session.eleve_age + " ans,<br>";
            mail_html += "instrument : " + req.session.eleve_instrument + " - " + req.session.eleve_cahier + " - " + req.session.eleve_piece + "<br>";
            mail_html += "professeur : " + req.session.eleve_prof_nom + " - " + req.session.eleve_prof_mail + "</p>";
            mail_html += '<br><br><p style="font-size: 11pt; font-family: Arial; color: #454343; text-decoration: none;">Association Française pour la pédagogie Suzuki<br>Marie Rossot - Pôle organisation du Concert national Unesco 2024</p><p><img src="cid:logo" alt="Logo" width="200" height="73"/></p>';

            // ajout du logo
            let dossier_image = path.resolve(__dirname, "../../public/images/logos/")+"/logosuzukigris.png";

            // VARIABLE POUR LE MAIL
            var mailOptions = {
                from: 'afps.inscription@gmail.com',
                to: req.session.adherent_mail,
                subject: mail_objet,
                html: mail_html,
                attachments: [{
                    filename: 'logosuzukigris.png',
                    path: dossier_image,
                    cid: 'logo'
                }]
            };
            
            envoie_mail.envoie_mail(mailOptions);

        } catch (error) {
            // Echec de connection à la GOOGLE SHEET
            logger.error("Erreur système : " + error, { numsession: req.session.id });
            req.session.err_mail_form_adhesion_1 = '"Il y a un problème système, "' + error;
            affiche_page_erreur();
        };

        req.session.err_mail_form_adhesion_1 = "Inscription dans la liste d'attente réussie";
        affiche_page_erreur();

    }

   
}



/////////////////////////////////////////////////
// EXPORT DES MODULES POUR QU'ILS PUISSENT LUS PAR LES AUTRES FICHIERS JS
/////////////////////////////////////////////////

module.exports = {
    inscription_listeattente
}
