/////////////////////////////////////////////////
// ADHÉSION
// [DOMAIN]/inscription
/////////////////////////////////////////////////

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

/////////////////////////////////////////////////
// APPELS DES MODULES
/////////////////////////////////////////////////
const express = require('express');
const router = express.Router();
// CALCUL DE DATE
const moment = require('moment');
moment.locale('fr');
let now = moment().format("YYYY-MM-DD HH:mm:ss");

/////////////////////////////////////////////////
// APPELS DES FONCTIONS
/////////////////////////////////////////////////
const {
    checkMail,
    post_form_adhesion,
    post_form_montant_total,
    post_paiement_cheque_save,
    post_paiement_virement_save,
    post_req_bank,
    get_res_bank,
    get_res_bank_annul,
    post_cartemanuelle_verifmail_envoicarte,
    post_cartes_manuelles_envoi,
    maj_googlesheet,
    maj_googlesheet_auto,
    maj_statut_paiement_manuel,
    suppr_adherent,
    import_ass_loacles
} = require("../controllers/adhesionController");

const {
    import_ass_locales_v2
} = require("../controllers/adhesion_imp_ass_locController");

const {
    adhesion_envoi_carte
} = require("../controllers/adhesion_envoi_carteController.js");


const {
    generer_codes
} = require("../controllers/codesController");

const { runSync_prof_strapi } = require("../controllers/sync_prof_strapiController");

/////////////////////////////////////////////////
// ROUTES
/////////////////////////////////////////////////

// Saisie de l'identifiant
router.get('/', function(req, res) {
    logger.info("on est dans la page web /adhesion (adhesionrouter.js)", { numsession: req.session.id });

    // AFFICHER LES VARIABLES CONTENANT LES 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;
        res.locals.err_mail_form_adhesion_4 = req.session.err_mail_form_adhesion_4;
        // on supprime le contenu après affichage
        req.session.err_mail_form_adhesion = undefined;
        req.session.err_mail_form_adhesion_1 = undefined;
        req.session.err_mail_form_adhesion_2 = undefined;
        req.session.err_mail_form_adhesion_3 = undefined;
        req.session.err_mail_form_adhesion_4 = undefined;
    }

    // AFFICHER LE MAIL IDENTIFIANT SI DÉJA SAISIE ET GARDÉ EN VARIABLE DE SESSION
    // EN CAS DE RECHARGEMENT DE LA PAGE
    if (req.session.identifiant) {
        res.locals.identifiant = req.session.identifiant;
    }
    res.locals.dirname = __dirname;

    // DATE LIMITE D'INSCRIPTION POUR LA SAISON
    // SI DATE DÉPASSÉE on affiche une page de fin
    if (now > (process.env.ad_date_limite + 1)) {
        // DATE DÉPASSÉE, on affiche la page de fin
        logger.info(`La date limmite d'inscription ${process.env.ad_date_limite} est dépassée`, { numsession: req.session.id });
        res.render('adhesion/page_templates/inscription_terminee');
    } else {
        // DATE NON DÉPASSÉE, on affiche la page d'inscription
        logger.info(`La date limmite d'inscription ${process.env.ad_date_limite} n'est pas encore dépassée`, { numsession: req.session.id });
        res.render('adhesion/page_templates/formulaire_adhesion_mail');
    }
    
});


/////////////////////////////////////////////////
// VERIFICATION DU MAILcheckMail
// METHODE HTTP POST
/////////////////////////////////////////////////
router.post('/', checkMail);

/////////////////////////////////////////////////
// OUVRIR LA PAGE DE SAISIE DES INFORMATIONS
// APRÈS VALIDATION DU MAIL
/////////////////////////////////////////////////
router.get('/adhesion_famille', function(req, res) {
    logger.info("req.session.identifiant DANS router.get '/adhesion_famille', = " + req.session.identifiant, { numsession: req.session.id });
    res.locals.identifiant = req.session.identifiant;
    res.locals.adherent_nom = req.session.adherent_nom;
    res.locals.famille = "Responsable de la famille :";
    req.session.adherent_type = "famille";
    if (now > (process.env.ad_date_limite + 1)) {
        res.render('adhesion/page_templates/inscription_terminee');
    } else {
        res.render('adhesion/page_templates/formulaire_adhesion_famille');    
    }
});

router.get('/adhesion_prof', function(req, res) {
    res.locals.identifiant = req.session.identifiant;
    res.locals.adherent_nom = req.session.adherent_nom;
    req.session.adherent_type = "";
    if (now > (process.env.ad_date_limite + 1)) {
        res.render('adhesion/page_templates/inscription_terminee');
    } else {
        res.render('adhesion/page_templates/formulaire_adhesion_prof');
    }
    
});

router.get('/adhesion_choix', function(req, res) {
    res.locals.identifiant = req.session.identifiant;
    res.locals.adherent_nom = req.session.adherent_nom;
    req.session.adherent_type = "";
    if (now > (process.env.ad_date_limite + 1)) {
        res.render('adhesion/page_templates/inscription_terminee');
    } else {
        res.render('adhesion/page_templates/formulaire_adhesion_choix');
    }
    
});

router.get('/adhesion_observateur', function(req, res) {
    res.locals.identifiant = req.session.identifiant;
    res.locals.adherent_nom = req.session.adherent_nom;
    res.locals.famille = "Inscription observateur :";
    req.session.adherent_type = "observateur";
    if (now > (process.env.ad_date_limite + 1)) {
        res.render('adhesion/page_templates/inscription_terminee');
    } else {
        res.render('adhesion/page_templates/formulaire_adhesion_observateur');
    }
    
});



/////////////////////////////////////////////////
// POST ENREGISTRER INFOS DANS BD
/////////////////////////////////////////////////
router.post('/adhesion_prof', post_form_adhesion);
router.post('/adhesion_observateur', post_form_adhesion);
router.post('/adhesion_famille', post_form_adhesion);


/////////////////////////////////////////////////
// PAGE DE PAIEMENT
/////////////////////////////////////////////////
router.get('/adhesion_paiement_total', function(req, res) {
    logger.info("on est dans la ROUTE /adhesion page_templates/adhesion_paiement_total.ejs", { numsession: req.session.id });
    res.locals.identifiant = req.session.identifiant;
    res.locals.adherent_paiement_montant_adhesion = req.session.adherent_paiement_montant_adhesion;

    res.render('adhesion/page_templates/adhesion_paiement_total.ejs');
});
router.post('/calcul_total', post_form_montant_total);

router.get('/adhesion_paiement_mode_paiement', function(req, res) {
    logger.info("on est dans la ROUTE /adhesion page_templates/adhesion_paiement/mode_paiement.ejs", { numsession: req.session.id });
    res.locals.identifiant = req.session.identifiant;
    res.locals.adherent_paiement_montant_adhesion = req.session.adherent_paiement_montant_adhesion;
    res.locals.montant_apayer = req.session.montant_apayer;
    res.locals.montant_apayer_cent = req.session.montant_apayer_cent;
    res.locals.adherent_paiement_montant_don = req.session.adherent_paiement_montant_don;
    logger.info("ROUTER req.session.montant_apayer: " + req.session.montant_apayer, { numsession: req.session.id });
    res.render('adhesion/page_templates/adhesion_paiement_mode_paiement.ejs');
});

router.post('/goto_bank', post_req_bank);
// CLIC SUR LE BOUTON VALIDER DU FORMULAIRE
// form action="paiement_cheque_save"
// DU FICHIER views/page_templates/adhesion_paiement_mode_paiement.ejs
router.post('/paiement_cheque_save', post_paiement_cheque_save);
router.post('/paiement_virement_save', post_paiement_virement_save);



router.get('/adhesion_paiement/attente', function(req, res) {
    logger.info("on est dans la ROUTE /adhesion_paiement/attente", { numsession: req.session.id });
    moment().format();
    moment.locale('fr');
    var date_formattee = moment().format('L');
    res.locals.today = date_formattee;
    res.locals.identifiant = req.session.identifiant;
    res.locals.profil1 = req.session.profil1;
    logger.info("req.session.profil1; : " + req.session.profil1, { numsession: req.session.id });
    res.locals.profil2 = req.session.profil2;
    res.locals.profil3 = req.session.profil3;
    res.locals.adherent_paiement_mode = req.session.adherent_paiement_mode;
    res.locals.adherent_paiement_montant_adhesion = req.session.adherent_paiement_montant_adhesion;
    res.locals.adherent_paiement_montant_don = req.session.adherent_paiement_montant_don;
    res.locals.adherent_paiement_montant_total = req.session.montant_apayer;
    res.render('adhesion/page_templates/adhesion_paiement_attente.ejs');
    logger.info("res.sendFile", { numsession: req.session.id });
});

router.get('/adhesion_paiement/reussi', get_res_bank);
router.get('/adhesion_paiement/annule', get_res_bank_annul);

/////////////////////////////////////////////////
// B) GÉNÉRER CARTE D'ADHÉRENT
// et justificatif de don
/////////////////////////////////////////////////
/////////////////////////////////////////////////


/////////////////////////////////////////////////
// ENVOI MANUEL CARTE ADHÉSION ET JUSTIFICATIF DE DON (SI DON)
// en saisissant l'identifiant dans un formulaire (1 identifiant à la fois)
// GET URL https://www.adhesion.afpedagogiesuzuki.fr/inscription/adhesion/carte_manuelle
/////////////////////////////////////////////////

router.get('/carte_manuelle', function(req, res) {
    logger.info("ON EST DANS ROUTE carte_manuelle", { numsession: req.session.id });
    // AFFICHER LES VARIABLES CONTENANT LES ERREURS
    // LE CONTENU DE CES VARIABLES ERREURS EST MIS DANS LE PROGRAMME ET AFFICHÉ AU RECHARGEMENT DE LA PAGE
    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;
        res.locals.err_mail_form_adhesion_4 = req.session.err_mail_form_adhesion_4;
        // on supprime le contenu après affichage
        req.session.err_mail_form_adhesion = undefined;
    }

    // AFFICHER LE MAIL IDENTIIFANT SI DÉJ0 SAISIE ET GARDÉ EN VARIABLE DE SESSION
    // EN CAS DE RECHARGEMENT DE LA PAGE
    if (req.session.identifiant) {
        res.locals.identifiant = req.session.identifiant;
    }
    res.locals.dirname = __dirname;

    res.render('adhesion/page_templates/formulaire_cartemanuelle_mail');
});

// CLIC SUR LE BOUTON ENVOYER CARTE ADHÉRENT DU FORMULAIRE
// form action="cartemanuelle_verifmail_envoicarte"
// DU FICHIER /views/page_templates/formulaire_cartemanuelle_mail.ejs
router.post('/cartemanuelle_verifmail_envoicarte', post_cartemanuelle_verifmail_envoicarte);

/////////////////////////////////////////////////
// ENVOI MANUEL CARTE ADHÉSION ET JUSTIFICATIF DE DON (SI DON)
// Si "x" dans la colonne "filtre" de la Google Sheet
// GET URL https://www.adhesion.afpedagogiesuzuki.fr/inscription/adhesion/carte_manuelle
/////////////////////////////////////////////////

router.get('/cartes_manuelles', function(req, res) {
    logger.info("ON EST DANS ROUTE cartes_manuelles", { numsession: req.session.id });
    // AFFICHER LES VARIABLES CONTENANT LES ERREURS
    // LE CONTENU DE CES VARIABLES ERREURS EST MIS DANS LE PROGRAMME ET AFFICHÉ AU RECHARGEMENT DE LA PAGE
    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;
        res.locals.err_mail_form_adhesion_4 = req.session.err_mail_form_adhesion_4;
        // 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;
        req.session.err_mail_form_adhesion_4 = undefined;
    }

    // AFFICHER LE MAIL IDENTIIFANT SI DÉJ0 SAISIE ET GARDÉ EN VARIABLE DE SESSION
    // EN CAS DE RECHARGEMENT DE LA PAGE
    if (req.session.identifiant) {
        res.locals.identifiant = req.session.identifiant;
    }
    res.locals.dirname = __dirname;

    res.render('adhesion/page_templates/adhesion_cartes_manuelles');
});

// CLIC SUR LE BOUTON ENVOYER CARTES ADHÉRENTS 
// form action="cartes_manuelles_envoi"
// DU FICHIER /views/page_templates/adhesion_cartes_manuelles.ejs
router.post('/cartes_manuelles_envoi', post_cartes_manuelles_envoi);

/////////////////////////////////////////////////
// GOOGLE SHEET
// DÉCHARGEMENT DES DONNÉES DANS GOOGLE SHEET
// AUTO LA NUIT AVEC WEB HOOK
/////////////////////////////////////////////////


router.get('/maj_googlesheet_auto', async function(req, res) {
    logger.info("on est dans la page web maj_googlesheet_auto (adhesionRouter.js)", { numsession: req.session.id });
    
    try {
        // Appelle la fonction maj_googlesheet_auto du contrôleur
        const result = await maj_googlesheet_auto(req, res);
        res.status(200).json({
            success: true,
            message: "router - Mise à jour Google Sheet réussie maj_googlesheet_auto",
            nb_onglet_adherent: result.nb_onglet_adherent,
            nb_onglet_prof: result.nb_onglet_prof,
            nb_onglet_stagiaires: result.nb_onglet_stagiaires,
            nb_onglet_eleves: result.nb_onglet_eleves,
            nb_onglet_adh_att: result.nb_onglet_adh_att,
            nb_onglet_finance: result.nb_onglet_finance,
            data: result,
        });
    } catch (error) {
        res.status(500).json({
            success: false,
            message: "router - Mise à jour Google Sheet ECHEC maj_googlesheet_auto",
            data: result,
        });
    }
});



/////////////////////////////////////////////////
// GOOGLE SHEET
// DÉCHARGEMENT DES DONNÉES DANS GOOGLE SHEET
// ‼️‼️‼️ N'est plus utilisé
/////////////////////////////////////////////////

router.get('/maj_googlesheet', function(req, res) {
    logger.info("on est dans la page web maj_googlesheet (adhesionRouter.js)", { numsession: req.session.id });

    // Pour afficher le résultats des requêtes de récupérations
    res.locals.message = req.session.message;
    res.locals.message2 = req.session.message2;
    res.locals.message3 = req.session.message3;
    res.locals.message4 = req.session.message4;
    res.locals.message5 = req.session.message5;
    res.locals.nb_adherent_maj = req.session.nb_adherent_maj;
    res.locals.nb_prof_maj = req.session.nb_prof_maj;
    res.locals.nb_prof_form_maj = req.session.nb_prof_form_maj;
    res.locals.nb_eleve_maj = req.session.nb_eleve_maj;
    res.locals.nb_finance_maj = req.session.nb_finance_maj;
    res.locals.nb_adherent_en_attente_maj = req.session.nb_adherent_en_attente_maj;
    // il faut initialiser les variables après les avoir copiées dans la variable d'affichage pour ne pas laisser un chiffre
    req.session.message = undefined;
    req.session.message2 = undefined;
    req.session.message3 = undefined;
    req.session.message4 = undefined;
    req.session.message5 = undefined;
    req.session.nb_adherent_maj = undefined;
    req.session.nb_prof_maj = undefined;
    req.session.nb_prof_form_maj = undefined;
    req.session.nb_eleve_maj = undefined;
    req.session.nb_finance_maj = undefined;
    req.session.nb_adherent_en_attente_maj = undefined;

    res.render('adhesion/page_templates/maj_googlesheet.ejs');

});

// CLIC SUR LE BOUTON "Mettre à jour GSheet"
router.post('/form_maj_googlesheet', maj_googlesheet);



/////////////////////////////////////////////////
// METTRE À JOUR LE STATUS DE PAIEMENT
// MANUELLEMENT
// DANS LA BD
/////////////////////////////////////////////////
// CLIC SUR LE BOUTON "Valider" de la page /maj_googlesheet
router.post('/form_maj_statut_paiement_manuel', maj_statut_paiement_manuel);

/////////////////////////////////////////////////
// SUPPRIMER UN ADHERENT
// METTRE "supprime" à la place de son identifiant
/////////////////////////////////////////////////
// CLIC SUR LE BOUTON "Valider" de la page /maj_googlesheet
router.post('/form_maj_suppr_adherent', suppr_adherent);

/////////////////////////////////////////////////
// ASSOCIATIONS LOCACLES
// IMPORTS ADHÉRENTS DANS DB
// CLIC SUR LE BOUTON "Valider" de la page /maj_googlesheet
/////////////////////////////////////////////////
//router.post('/form_import_ass_locales', import_ass_loacles);
router.post('/form_import_ass_locales', import_ass_locales_v2);

/////////////////////////////////////////////////
// ENVOI DE CARTE ADHERENT
/////////////////////////////////////////////////
router.get('/adhesion_envoi_carte/:identifiant_afps', adhesion_envoi_carte);

/////////////////////////////////////////////////
// GÉNÉRATION DE CODE
// CLIC SUR LE BOUTON "Générer" de la page /maj_googlesheet
/////////////////////////////////////////////////
router.post('/form_generation_codes', generer_codes);

/////////////////////////////////////////////////
// EXPORT DES PROFESSEURS POUR STRAPI ET ANNUAIRE SITE AFPS
/////////////////////////////////////////////////
// déclenche manuellement la synchro en visitant /admin/sync
router.get("/sync_prof_strapi", async (req, res, next) => {
  try {
    const result = await runSync_prof_strapi(req, res);
    //res.json({ ok: true, ...result });
  } catch (e) {
    next(e);
  }
});

/////////////////////////////////////////////////
// EXPORT DE MODULE POUR QU'IL SOIT LU DANS LES AUTRES FICHIERS JS
/////////////////////////////////////////////////
module.exports = router;