/////////////////////////////////////////////////
// LOGGING
/////////////////////////////////////////////////
const logger = require("../../public/js/app/logger_lienventetemp");
/////////////////////////////////////////////////
// APPELS DES MODULES
/////////////////////////////////////////////////
const moment = require('moment');
const ejs = require('ejs');
const nodemailer = require('nodemailer');
const path = require("path");
const fs = require("fs");
const mysql = require('mysql2');
const mysql_promise = require('mysql2/promise');
////////////////////////////////////////////////////
// FILE NAME
////////////////////////////////////////////////////
const filename = path.parse(__filename).base;

// Configuration de la connexion à la base de données
const dbConfig = {
    host: process.env.db_connection_host,
    port: process.env.db_connection_port,
    user: process.env.db_connection_user,
    password: process.env.db_connection_password,
    database: process.env.db_connection_database
};


// Stockage des fichiers avec une date d'expiration
const fileLinks = {};

// DATE
moment.locale('fr');
  var date_formattee = moment().format('L')
  var today = date_formattee;

const generate_link = async function(req, res) {

    try {
        // CONNEXION A LA BD
        const db_connection_promise = await mysql_promise.createConnection(dbConfig);

        const linkId = Date.now();
        const filePath = path.join(__dirname, 'files', 'film_suzuki_unesco_2024.mp4'); // Chemin du fichier
        let expiresAt = new Date(Date.now() + 24 * 60 * 60 * 1000); // 24 heures à partir de maintenant
        // Format de la date pour MySQL
        expiresAt = expiresAt.toISOString().slice(0, 19).replace('T', ' '); // 'YYYY-MM-DD HH:MM:SS'
        const link = `${process.env.DOMAIN_EXTERNE}boutique/unesco/download/${linkId}`;
        //const linkId = Date.now(); // Un identifiant unique basé sur le timestamp
        //fileLinks[linkId] = {
        //    filePath: filePath,
        //    expiresAt: Date.now() + 24 * 60 * 60 * 1000 // 24 heures
        //};
        
        sql = 'INSERT INTO TemporaryLinks (id, link, filePath, expiresAt) VALUES ('+ linkId +', "'+ link +'", "'+ filePath +'", "'+ expiresAt +'")';
        console.log("sql : ", sql);
        const [results, fields] = await db_connection_promise.execute(sql);

        // L'ID généré par MySQL est accessible ici
        console.log("results.affectedRows : ", results.affectedRows);
        
        
        console.log("link : ", link);
        return link;
    } catch (error) {
        // Echec de connection à la BD
        logger.error("Il y a un problème avec la connection à  la base de données! : " + error, { numsession: req.session.id });
        await db_connection_promise.end();
        return error;
        //return res.status(403).send('Il y a un problème avec la connection à  la base de données!');
  }
}

const download_file = async function(req, res) {
    const linkId = req.params.id;
    //const fileData = fileLinks[linkId];
    console.log("linkId : ",linkId);


    try {
        // CONNEXION A LA BD
        const db_connection_promise = await mysql_promise.createConnection(dbConfig);
        const [rows] = await db_connection_promise.execute(
            'SELECT filePath, expiresAt FROM TemporaryLinks WHERE id = ?',
            [linkId]
        );
        console.log("rows.length : ",rows.length);

        if (rows.length > 0) {
            console.log("rows.expiresAt : ",rows[0].expiresAt);
            console.log("today : ",today);
            console.log("Date.now() : ",Date.now());
            const expiresAt = new Date(rows[0].expiresAt);
            console.log("expiresAt : ",expiresAt);
            console.log("expiresAt.getTime() : ",expiresAt.getTime());
            if (Date.now() < expiresAt.getTime()) {
                req.session.filePath = rows[0].filePath;
                req.session.expiresAt = rows[0].expiresAt;
                res.download(rows[0].filePath, (err) => {
                    if (err) {
                        res.status(404).send('File not found');
                    }
                });
            } else {
                res.status(403).send('Link has expired');
            }
            
        } else {
            res.status(403).send('Link does not exist');
        }
    } catch (error) {
        // Echec de connection à la BD
        logger.error("Il y a un problème avec la connection à  la base de données! : " + error, { numsession: req.session.id });
        await db_connection_promise.end();
        return error;
    }
}

/////////////////////////////////////////////////
// EXPORT DE MODULE POUR QU'IL SOIT LU DANS LES AUTRES FICHIERS JS
/////////////////////////////////////////////////
module.exports = {
    generate_link,
    download_file
}

