/////////////////////////////////////////////////
// APPELS DES MODULES
/////////////////////////////////////////////////
const path = require("path");
// CALCUL DE DATE
const moment = require('moment');
// uuid
const { v4: uuidv4 } = require('uuid');

/////////////////////////////////////////////////
// APPELS DES MODULES PERSOS
/////////////////////////////////////////////////
// loggings
const logger = require("../public/js/app/logger_adhesion");
// 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 GS_codes_secrets = new GoogleSpreadsheet(process.env.gsheet_codes_secrets);
const { error } = require("console");


/////////////////////////////////////////////////
// FONCTIONS
/////////////////////////////////////////////////

const generer_codes = async function(req, res) {

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

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

    // Récupérer le nombre de code désiré
    nb_codes_a_generer = req.body.nb_code;

    // Si il y a des codes à ajouter on fait le traitement
    if (nb_codes_a_generer > 0) {
        logger.info("Nombre de codes à générer = " + nb_codes_a_generer, { numsession: req.session.id });

        // Initier un tableau pour mettre les codes générés
        let tab_codes = [];

        // Boucle sur le nombre de codes à générer
        for (i=0; i<nb_codes_a_generer; i++) {
            // Générer un code unique
            let uniqueCode = uuidv4();
            
            // remplir le tableau avec le code généré
            tab_codes.push({['code'] : uniqueCode,'statut': "actif" });
            console.log("tab_codes = ", tab_codes);

        }

        // Copier les codes générés dans la base de données
        let table = "code";

        const sql = 'INSERT INTO code (code, statut) VALUES ?';
        const values = tab_codes.map(item => [item.code, item.statut]);
        logger.info("sql = " + sql, { numsession: req.session.id });
        logger.info("values = " + values, { numsession: req.session.id });

        // lancement de la requête
        let db_connection_promise = await connect_DB_promise();

        const [result_sql, fields] = await db_connection_promise.query(sql, [values]);
        logger.info("#1 result_sql Row ID added : " + result_sql.insertId, { numsession: req.session.id, label: filename});
        console.log("result_sql = ",result_sql)

        // GOOGLE SHEET - COPIER LES CODES DANS LA GOOGLE SHEET
        try {
            await GS_codes_secrets.useServiceAccountAuth(GS_creds);
            await GS_codes_secrets.loadInfo();
            let GS_codes_secrets_codes_secrets = GS_codes_secrets.sheetsByTitle['codes_secrets'];


            let ajout_codes = [];
            for (let i = 0; i < nb_codes_a_generer; i++) {
                ajout_codes.push({
                    code: tab_codes[i].code,
                    date_creation: now,
                    statut: tab_codes[i].statut
                });
            }
            await GS_codes_secrets_codes_secrets.addRows(ajout_codes);

            logger.info("AJOUT GOOGLESHEET FIN", { numsession: req.session.id, label: filename});

        } catch (error) {
            // Echec de connection à la GOOGLE SHEET
            logger.error("Il y a un problème avec la connection à Google sheet (TRY 7) : " + error, { numsession: req.session.id, label: filename});
            req.session.message5 = '"Il y a un problème système, "' + error;
            res.redirect('/adhesion/maj_googlesheet');
        }

        // A LA FIN DU TRAITEMENT ON AFFICHE LA PAGE AVEC LE RÉSULTAT
        if (result_sql.affectedRows > 0) {
            req.session.message5 = 'Nombre de codes ajoutés = '+result_sql.affectedRows;
        } else {
            req.session.message5 = 'Aucun code ajouté';
        }
        logger.info("req.session.message5 : " + req.session.message5, { numsession: req.session.id, label: filename});
    } else {
        req.session.message5 = 'Veuillez renseigner le nombre de codes à générer';
        logger.info("req.session.message5 : " + req.session.message5, { numsession: req.session.id, label: filename});
    }

    res.redirect('/adhesion/maj_googlesheet');
}


/////////////////////////////////////////////////
// EXPORT DE MODULE POUR QU'IL SOIT LU DANS LES AUTRES FICHIERS JS
/////////////////////////////////////////////////

module.exports = {
    generer_codes
}