/////////////////////////////////////////////////
// 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');


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

////////////////////////////////////////////////////
// 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
    });
}



/////////////////////////////////////////////////
// 
// !!!! ACHAT UNIQUEMENT DE SPECTATEUR
//
// PAGE 1
// DOMAIN/concert/identifier
// 2. SAISIE DU L'IDENTIFIANT
// VÉRIFICATION SI L'IDENTIFIANT EST ADHÉRENT
/////////////////////////////////////////////////

const inscription_spectateur_tous = async function (req, res) {

    /////////////////////////////////////////////////
   // RECHERCHE DANS DB 
   //      - SI IDENTIFIANT SAISIE EST DÉJÀ INSCRIT AU CONCERT

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


   function affiche_page_identifier() {
       ////////////////////////////////////////////////////
       // AFFIHER LA PAGE /identifier
       // AFFICHAGE DES ERREURS
       // EN CAS DE RETOUR SUR LA PAGE AVEC ERREUR :
       //  - SI IDENTIFIANT NON ADHÉRENT
       //  - SI RIEN SAISIE
       ////////////////////////////////////////////////////

       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/achat_spectateur_tous');
   };

   // VARIABLES
   req.session.quota_spectateur = "nondepasse";


       // CONNECTION DB PROMISE
       try {

        //Connexion
        let db_connection_promise = await connect_DB_promise();

               // QUOTA GÉNÉRAL DE PLACES TOTALES
               let sql_ca_decompte_place = 'select spectateur_commandes from ca_decompte_place';
               const [results_ca_decompte_place, fields_ca_decompte_place] = await db_connection_promise.execute(sql_ca_decompte_place);
               logger.info("SQL nombre de places spectateurs déjà commandées : " + results_ca_decompte_place[0].spectateur_commandes, { numsession: req.session.id, label: filename});
            
                // QUOTA GÉNÉRAL ATTEINT
                if (results_ca_decompte_place[0].spectateur_commandes >= process.env.spectateur_nb_places){
                    // QUOTA DÉPASSÉ
                    req.session.quota_spectateur = "depasse";
                    logger.info("Quota spectateur TOTAL dépassé : " + results_ca_decompte_place[0].spectateur_commandes, { numsession: req.session.id, label: filename});
                    req.session.err_mail_form_adhesion_1 = "Le nombre total de spectateurs a été atteint.";
                    req.session.err_mail_form_adhesion_2 = "Vous ne pouvez plus commander de places";
                    affiche_page_identifier();
                }

                // NOMBRE DE PLACES TOTALES RESTANTES
                req.session.quota_total_spectateur = process.env.spectateur_nb_places - results_ca_decompte_place[0].spectateur_commandes;
                logger.info("NOMBRE DE PLACES TOTALES RESTANTES : " + req.session.quota_total_spectateur, { numsession: req.session.id, label: filename});





               // ON AFFICHE LA PAGE D'ACHAT DES PLACES SPECTATEURS

               
               res.locals.quota_spectateur = req.session.quota_spectateur;
               res.locals.quota_total_spectateur = req.session.quota_total_spectateur;
               res.render('concert/page_templates/achat_spectateur_tous');
           

           

       } 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.";
           //await db_connection_promise.end();
           affiche_page_identifier();
       }

   

}

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

module.exports = {
    inscription_spectateur_tous
}
