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

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

/////////////////////////////////////////////////
// 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 {
    generate_link,
    download_file
} = require("../controllers/vente_video/generate_linkController");

const {
    post_req_stripe,
    ventevideo_accompte_reussi,
    ventevideo_accompte_annule
} = require("../controllers/vente_video/vente_videoController");


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

/////////////////////////////////////////////////
// VIDÉO UNESCO
/////////////////////////////////////////////////

// ECRAN 1 : ACCUEIL DE LA VENTE DE LA VIDEO
router.get('/videos', function(req, res) {
    logger.info("on est dans la page web /videos (ventevideoRouter.js)", { numsession: req.session.id });

    // AFFICHER LES VARIABLES CONTENANT LES ERREURS
    if (req.session.affiche_err_1) {
        res.locals.affiche_err_1 = req.session.affiche_err_1;
        // on supprime le contenu après affichage
        req.session.affiche_err_1 = undefined;
    }

    res.render('ventevideo/page_templates/ventelien_boutonacheter');

});

// ECRAN 2 : PAIEMENT AVEC STRIPE
router.post('/videos', post_req_stripe);

// ECRAN 3 - RETOUR STRIPE
router.get('/videos/paiement_reussi', ventevideo_accompte_reussi);
router.get('/videos/paiement_annule', ventevideo_accompte_annule);

/////////////////////////////////////////////////
// Générer le lien temporaire
/////////////////////////////////////////////////

// ROUTE DE TEST
router.get('/unesco/lien', async function(req, res) {
    logger.info("on est dans la route vente video lien (ventevideoRouter.js)", { numsession: req.session.id });
    
    try {
        // APPEL DU CONTROLLER QUI GÉNÉRE LE LIEN
        const result = await generate_link(req, res);
        logger.info("on est dans la route vente video lien try", { numsession: req.session.id });
        logger.info("result : " + result, { numsession: req.session.id });
        //  envoie de la réponse HTTP "200 : ok" avec les données
        res.status(200).json({
            success: true,
            message: "Génération du lien réussi",
            data: result
        });
    } catch (error) {
        logger.info("on est dans la route vente video lien catch", { numsession: req.session.id });
        //  envoie de la réponse HTTP "500 : erreur server" avec les données
        res.status(500).json({
            success: false,
            message: "Génération du lien échec"
        });
    }
});

// ROUTE POUR LA BOUTIQUE VIDEOS
router.get('/videos/whstripe', async function(req, res) {
    logger.info("on est dans la route vente video lien (ventevideoRouter.js)", { numsession: req.session.id });
    
    try {
        // APPEL DU CONTROLLER QUI GÉNÉRE LE LIEN
        const result = await generate_link(req, res);
        logger.info("on est dans la route vente video lien try", { numsession: req.session.id });
        logger.info("result : " + result, { numsession: req.session.id });
        //  envoie de la réponse HTTP "200 : ok" avec les données
        res.status(200).json({
            success: true,
            message: "Génération du lien réussi",
            data: result
        });
    } catch (error) {
        logger.info("on est dans la route vente video lien catch", { numsession: req.session.id });
        //  envoie de la réponse HTTP "500 : erreur server" avec les données
        res.status(500).json({
            success: false,
            message: "Génération du lien échec"
        });
    }
});

/////////////////////////////////////////////////
// Endpoint pour télécharger le fichier depuis le lien généré
/////////////////////////////////////////////////

router.get('/unesco/download/:id', async function(req, res) {
    logger.info("on est dans la route vente video download (ventevideoRouter.js)", { numsession: req.session.id });
    logger.info("lien de téléchargement appelé : " + req.originalUrl, { numsession: req.session.id });
    
    try {
        // APPEL DU CONTROLLER QUI contrôle le lien et download le fichier
        const result = await download_file(req, res);
        logger.info("on est dans la route vente video download try", { numsession: req.session.id });
        logger.info("result : " + result, { numsession: req.session.id });
        
        // AFFICHAGE DU RÉSULTAT en fonction de l'expiration ou non du lien
        if (result === "Lien expiré") {
            //  envoie de la réponse HTTP "403 : forbidden" avec les données
            return res.status(403).send('Link has expired');
        } else if (result === "Lien non trouvé") {
            return res.status(404).send('Link does not exist');
        } else {
            // méthode download() d'Express.js
            // Cette méthode est utilisée pour envoyer un fichier au client et déclencher un téléchargement dans le navigateur. Lorsque cette méthode est appelée, le navigateur du client affichera une boîte de dialogue pour télécharger le fichier spécifié.
            return res.render('ventevideo/page_templates/ventelien_telechargement_encours', {
                message : "Votre téléchargement a commencé automatiquement.",
                filename: result
            }, () => {
                res.download(result, (err) => {
                    if (err) {
                        //  envoie de la réponse HTTP "404 : ressource non trouvée" avec les données
                        return res.status(404).send('File not found');
                    }
                });
            });

        }
    } catch (error) {
        logger.info("on est dans la route vente video download catch", { numsession: req.session.id });
        return res.status(500).json({
            success: false,
            message: "download échec"
        });
    }
});

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