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

/////////////////////////////////////////////////
// PAGE 1
// DOMAIN/concert/identifier
// AFFICHAGE DE LA PAGE DE SAISIE DE L'IDENTIFIANT
// AFFICHAGE DU NOMBRE DE PLACES RESTANTES
/////////////////////////////////////////////////

const openidentifiant = async function (req, res) {
    logger.info("======================================", { label: filename });
    logger.info("======== FUNCTION openidentifiant ==========", { 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/inscrip_formulaire_identifier');
    };

    ////////////////////////////////////////////////////
    // ON RÉCUPÈRE LE NOMBRE DE PLACES DÉJA COMMANDÉES DANS LA BASE DE DONNÉES
    // !!! ATTENTION IL FAUT QUE LES NOMBRES SOIENT A ZÉRO AU DÉMMARAGE dans la table ca_decompte_place
    ////////////////////////////////////////////////////

    async function recup_nb_places () {
        logger.info("==================================================================", { label: filename });
        logger.info("======== ON RÉCUPÈRE LE NOMBRE DE PLACES DÉJA COMMANDÉES DANS LA BASE DE DONNÉES ==========", { label: filename });

        // CONNECTION DB PROMISE
        try {
            //Connexion
            let db_connection_promise = await connect_DB_promise();
            //Query
            let sql = 'select spectateur_commandes,encadr_parent_commandes,piano_commandes,alto_commandes,flute_commandes,trompette_commandes,harpe_commandes,violon1_commandes,violon2_commandes,violoncelle1_commandes,violoncelle2_commandes from ca_decompte_place';
            const [results, fields] = await db_connection_promise.execute(sql);

            req.session.spectateur_nb_restantes = process.env.spectateur_nb_places - results[0].spectateur_commandes;
            req.session.encadr_parent_nb_restantes = process.env.encadr_parent_nb_places - results[0].encadr_parent_commandes;
            req.session.piano_nb_restantes = process.env.piano_nb_places - results[0].piano_commandes;
            req.session.alto_nb_restantes = process.env.alto_nb_places - results[0].alto_commandes;
            req.session.flute_nb_restantes = process.env.flute_nb_places - results[0].flute_commandes;
            req.session.trompette_nb_restantes = process.env.trompette_nb_places - results[0].trompette_commandes;
            req.session.harpe_nb_restantes = process.env.harpe_nb_places - results[0].harpe_commandes;
            req.session.violon1_nb_restantes = process.env.violon1_nb_places - results[0].violon1_commandes;
            req.session.violon2_nb_restantes = process.env.violon2_nb_places - results[0].violon2_commandes;
            req.session.violoncelle1_nb_restantes = process.env.violoncelle1_nb_places - results[0].violoncelle1_commandes;
            req.session.violoncelle2_nb_restantes = process.env.violoncelle2_nb_places - results[0].violoncelle2_commandes;

            res.locals.spectateur_nb_restantes = req.session.spectateur_nb_restantes;
            res.locals.encadr_parent_nb_restantes = req.session.encadr_parent_nb_restantes;
            logger.info("res.locals.encadr_parent_nb_restantes : " + res.locals.encadr_parent_nb_restantes, { numsession: req.session.id, label: filename });
            res.locals.piano_nb_restantes = req.session.piano_nb_restantes;
            res.locals.alto_nb_restantes = req.session.alto_nb_restantes;
            res.locals.flute_nb_restantes = req.session.flute_nb_restantes;
            res.locals.trompette_nb_restantes = req.session.trompette_nb_restantes;
            res.locals.harpe_nb_restantes = req.session.harpe_nb_restantes;
            res.locals.violon1_nb_restantes = req.session.violon1_nb_restantes;
            res.locals.violon2_nb_restantes = req.session.violon2_nb_restantes;
            res.locals.violoncelle1_nb_restantes = req.session.violoncelle1_nb_restantes;
            res.locals.violoncelle2_nb_restantes = req.session.violoncelle2_nb_restantes;

            affiche_page_identifier();

        } 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, label: filename });
            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();
        }
    }

    recup_nb_places();

    

}

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

module.exports = {
    openidentifiant
}

