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

/////////////////////////////////////////////////
// APPELS DES MODULES PERSOS
/////////////////////////////////////////////////
// loggings
const logger = require("../../public/js/app/logger_stagenat");
// DB
const { connect_DB_promise } = require('../../modules/db/databaseconnect');
// VÉRIF CODE SECRET
const { verif_codesecret } = require('../../modules/verif_codesecret');


// recherche si identifiant saisie est bien dans la base de données des adhérents
const { checkAdherent } = require('./../../modules/db/checkAdherent');


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


/////////////////////////////////////////////////
// PAGE 1
// DOMAIN/stagenational/identifier
// 
// SAISIE DE L'IDENTIFIANT : ON LE VÉRIFIE :
// - RECHERCHE SI PERSONNE DÉJA INSCRITE
// - SI NON INSCRITE
//      -RECHERCHE SI ADHÉRENTE DANS BD AFPS
// 
/////////////////////////////////////////////////

async function SN_checkidentifiant(req, res) {

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

    // un tag pour ne pas ajouter plusieurs fois le même participant en cas de rafraîchissement de la page
    req.session.participant_ajoute = "non";

    /////////////////////////////////////////////////
    // ON RÉCUPÈRE L'IDENTIFIANT SAISIE DANS LE FORMULAIRE
    req.session.identifiant = req.body.identifiant;
    logger.info("identifiant saisi : " + req.body.identifiant, { numsession: req.session.id, label: filename});
    req.session.code_secret = req.body.code_secret;

    // ON REGARDE S'il à bien rempli l'identifiant et s'il a coché la case "je ne suis pas adhérent"
    if (req.body.identifiant  && req.body.check_nonadherent) {
        req.session.err_mail_form_adhesion_1 = "Pour vous inscrire au stage, vous devez au préalable être adhérent à l'Association Française pour la Pédagogie Suzuki (AFPS).";
        req.session.err_mail_form_adhesion_2 = 'Si vous faites partie d\'une association non française veulliez cocher la case "Je suis adhérent à une Association Suzuki dans un autre pays en renseignant votre identifiant ou votre mail.';
        req.session.err_mail_form_adhesion_3 = 'Pour adhérer <a target="_blank" href="https://www.inscription.afpedagogiesuzuki.fr/adhesion/"><span class="souligne">Cliquez ici</span></a>';
        res.redirect('/stagenational/identifier');
    }
    if (!req.body.identifiant  && req.body.check_nonadherent) {
        req.session.err_mail_form_adhesion_1 = "Pour vous inscrire au stage, vous devez au préalable être adhérent à l'Association Française pour la Pédagogie Suzuki (AFPS).";
        req.session.err_mail_form_adhesion_2 = 'Si vous faites partie d\'une association non française veulliez cocher la case "Je suis adhérent à une Association Suzuki dans un autre pays en renseignant votre identifiant ou votre mail.';
        req.session.err_mail_form_adhesion_3 = 'Pour adhérer <a target="_blank" href="https://www.inscription.afpedagogiesuzuki.fr/adhesion/"><span class="souligne">Cliquez ici</span></a>';
        res.redirect('/stagenational/identifier');
    }
    if (!req.body.identifiant  && !req.body.check_nonadherent) {
        req.session.err_mail_form_adhesion_1 = "Veuillez entrer votre identifiant AFPS<br>(Association Française pour la Pédagogie Suzuki),<br><br>ou l'identifiant d'adhésion à votre Association Nationale Suzuki.";
        req.session.err_mail_form_adhesion_2 = "Si vous n'êtes pas encore adhérent, vous pouvez adhérer en";
        req.session.err_mail_form_adhesion_3 = '<a target="_blank" href="https://www.inscription.afpedagogiesuzuki.fr/adhesion/"><span class="souligne">Cliquez ici</span></a>';
        res.redirect('/stagenational/identifier');
    }

    // SAISIE OK ON PEUT CONTINUER
    if (req.body.identifiant && !req.body.check_nonadherent) {
    
        // EST-CE QUE L'IDENTIFIANT SAISI EST DÉJA INSCRIT AU STAGE TABLE stn_adherent
        // CONNECTION DB PROMISE
        try {
            //Connexion
            const db_connection_promise = await connect_DB_promise();

            // DATE LIMITE DEPASSÉE
            // on regarde d'abord s'il a le bon code secret
            // et ensuite s'il est déjà inscrit au stage ou pas

            await verif_codesecret(req, res);
            logger.info("req.session.onpeutcontinuer : " + req.session.onpeutcontinuer , { numsession: req.session.id, label: filename});
        

            if (req.session.onpeutcontinuer === "oui") {
                // VÉRIFICATION DÉJA INSCRIT AU STAGE OU PAS
                let sql = 'select identifiant, association_suzuki, adherent_mail from stn_adherent where identifiant = "' + req.session.identifiant + '" AND statut_suppression = 0';
    
                logger.info("sql stn_adherent  : " + sql, { numsession: req.session.id, label: filename});
                const [results_checkStagiaire, fields] = await db_connection_promise.execute(sql);
                await db_connection_promise.end();

                if (results_checkStagiaire.length) {
                    // DÉJA INSCRIT AU stage
                    // ON AFFICHE LA PAGE DE SAISIE DE L'IDENTIFIANT AVEC ERREUR "déjà inscrit"
                    req.session.err_mail_form_adhesion_1 = "L'identifiant <strong>" + req.session.identifiant + "</strong> est déjà inscrit au stage national.";
                    res.redirect('/stagenational/identifier');

                } else {
                    // NON INSCRIT AU stage
                    logger.info("Identifant non inscrit au stage : "+req.session.identifiant, { numsession: req.session.id, label: filename});
                    
                    // IDENTIFIANT SAISIE ET CASE AUTRE PAYS COCHÉ
                    // ON AFFICHE LA PAGE DU FORMULAIRE DE SAISIE DES INFORMATIONS DE L'INSCRIPTION
                    if (req.body.identifiant && !req.body.check_nonadherent && req.body.check_autrepays) {
                        req.session.association_suzuki = "autre pays";
                        res.redirect('/stagenational/formulaire');
                    } else {
                        /////////////////////////////////////////////////
                        // RECHERCHE SI PERSONNE EST ADHÉRENTE À L'AFPS
                        // DANS BD ADHESION adherent

                        sql = 'select identifiant,association_suzuki from adherent where identifiant = "' + req.session.identifiant + '"';
                        const retour_checkAdherent = await checkAdherent(sql);
                        
                        if (retour_checkAdherent.error) {
                            logger.info("Il y a un problème avec la connection à la base de données adherent ! : " + retour_checkAdherent.error, { numsession: req.session.id, label: filename});
                            req.session.err_mail_form_adhesion_3 = "Il y a un problème système connexion base de données, veuillez recommencer." + retour_checkAdherent.error;
                            res.redirect('/stagenational/identifier');
                        } else if (retour_checkAdherent.found) {
                            // LA PERSONNE EST BIEN ADHÉRENTE
                            req.session.association_suzuki = retour_checkAdherent.results_checkAdherent.association_suzuki;
                            logger.info("req.session.association_suzuki : " + retour_checkAdherent.results_checkAdherent.association_suzuki, { numsession: req.session.id, label: filename});
                            // ON AFFICHE LA PAGE DU FORMULAIRE DE SAISIE DES INFORMATIONS DE L'INSCRIPTION
                            res.redirect('/stagenational/formulaire');
                        } else {
                            // LA PERSONNE N'EST PAS ADHÉRENTE
                            logger.info("Identifant NON adhérent : " + req.session.identifiant, { numsession: req.session.id, label: filename});
                            req.session.err_mail_form_adhesion_1 = "L'identifiant saisi n'est pas reconnu comme adhérent de l'Association Française pour la Pédagogie Suzuki (AFPS) pour 2025/2026.";
                            req.session.err_mail_form_adhesion_2 = 'Vous devez adhérer avant de vous inscrire au stage. Si vous êtes membre d\'une association Suzuki non française, veuillez cocher la case "Je suis adhérent à une Association Suzuki dans un autre pays" et renseigner votre identifiant ou votre adresse e-mail.';
                            req.session.err_mail_form_adhesion_3 = 'Pour adhérer à l\'Association Française pour la Pédagogie Suzuki, <a target="_blank" href="https://www.inscription.afpedagogiesuzuki.fr/adhesion/"><span class="souligne">cliquez ici</span></a>';
                            res.redirect('/stagenational/identifier');
                        }
                    }
                    

                }
            } else {
                logger.info("Votre session est terminé 'onpeutcontinuer' : " + req.session.onpeutcontinuer, { numsession: req.session.id });
                //req.session.err_mail_form_adhesion_3 = 'Votre session est terminée ("onpeutcontinuer" = non), veuillez recommencer.';
                res.redirect('/stagenational/identifier');
            }

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

    }


    

}

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

module.exports = {
    SN_checkidentifiant
}