/////////////////////////////////////////////////
// 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é
/////////////////////////////////////////////////
// Route pour afficher le template avant téléchargement
router.get('/unesco/download/:id', async function(req, res) {
    logger.info("on est dans la route vente video download affichage du lien (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 récupère le chemin du 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 });

        // Vérification du résultat avant d'afficher la page
        if (result === "Lien expiré") {
            return res.status(403).render('ventevideo/page_templates/ventelien_telechargement_encours', {
                message: "Le lien de téléchargement a expiré.",
                downloadUrl: ``,
                message_color: "rouge"
            });
        } else if (result === "Lien non trouvé") {
            return res.status(404).render('ventevideo/page_templates/ventelien_telechargement_encours', {
                message: "Le lien de téléchargement est introuvable.",
                downloadUrl: ``,
                message_color: "rouge"
            });
        } else {
            // Rendu du template avec script pour télécharger automatiquement
            return res.render('ventevideo/page_templates/ventelien_telechargement_encours', {
                message: "Cliquez sur ce lien pour démarrer le téléchargement du film : ",
                downloadUrl: `/boutique/unesco/download_file/${req.params.id}`, // URL pour le téléchargement
                message_color: ""
            });
        }
    } catch (error) {
        logger.error("Erreur dans la route de téléchargement", { error, numsession: req.session.id });
        return res.status(500).render('ventevideo/page_templates/ventelien_telechargement_encours', {
            message: "Une erreur est survenue pendant le téléchargement.",
            downloadUrl: ``,
            message_color: "rouge"
        });
    }
});

router.get('/unesco/download_file/: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 });
    logger.info("req.session.originPath = " + req.session.originPath, { numsession: req.session.id });
    logger.info("lien de téléchargement appelé : " + req.originalUrl, { numsession: req.session.id });
    
    const expiresAtDate = new Date(req.session.expiresAt);
    try {
        
        console.log("expiresAtDate.getTime() = ", expiresAtDate.getTime());
        if (Date.now() < expiresAtDate.getTime()) {
            
            return res.download(req.session.originPath, (err) => {
                if (err) {
                    logger.error("Erreur de téléchargement / Fichier non trouvé.", { error: err });
                    return res.status(404).render('ventevideo/page_templates/ventelien_telechargement_encours', {
                        message: "Fichier non trouvé.",
                        downloadUrl: ``,
                        message_color: "rouge"
                    });
                }
            });
        } else {
            logger.error("Lien expiré");
            return res.status(404).render('ventevideo/page_templates/ventelien_telechargement_encours', {
                message: "Lien expiré.",
                downloadUrl: ``,
                message_color: "rouge"
            });
        }
    } catch (error) {
        logger.error("Erreur lors de la tentative de téléchargement", { error });
        return res.status(500).render('ventevideo/page_templates/ventelien_telechargement_encours', {
            message: "Téléchargement en échec.",
            downloadUrl: ``,
            message_color: "rouge"
        });
    }
});




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