import conn from '../database.js';
import fs from "fs";
import { CronJob } from 'cron';

/**
 * Calcules les stats sur une periode donnée et les stocke dans la BDD
 * @param {Number} timePeriod Periode de temps sur laquelle calculer les données. Par exemple 7 si on veut faire les stats des 7 derniers jours
 * @param {String} generalTableName Nom de la table dans laquelle mettre les statistiques générales (tables valides : stats_general_jour stats_general_semaine stats_general_mois stats_general_annee)
 * @param {*} otherTableName Nom de la table dans laquelle mettre les statistiques spécifiques (tables valides : stats_autres_jour stats_autres_autres_autres_mois stats_general_annee)
 * @returns Une Promise qui résout si la requête a fonctionnée
 */
const computeStats = async (timePeriod, generalTableName, otherTableName) => {
    return new Promise((resolve, reject) => {
        let sql = fs.readFileSync("stats/update_request.sql").toString();
        sql = sql
            .replace(new RegExp("DAY_COUNT_DELAY",'g'), timePeriod.toString())
            .replace(new RegExp("STATS_GENERAL_TABLE_NAME", 'g'), generalTableName)
            .replace(new RegExp('STATS_AUTRES_TABLE_NAME', 'g'), otherTableName)
        conn.query(sql, (err, res) => {
            if(err) {
                reject(err)
            }else {
                resolve();
            }
        });
    })
}
export const startCronJobs = () => {
    //Update les stats journalières tout les jours a minuit
    new CronJob(
        '0 0 * * * * ',
        () => {
            computeStats(1,"stats_general_jour","stats_autres_jour");
        },
        null,
        true
    )

    //update les stats de la semaine tous les lundis a minuit
    new CronJob(
        '0 0 * * 1 * ',
        () => {
            computeStats(7,"stats_general_semaine","stats_autres_jour");
        },
        null,
        true
    )

    //update les stats mensuelles les 1er du mois a minuit
    new CronJob(
        '0 0 1 * * * ',
        () => {
            computeStats(30, "stats_general_mois","stats_autres_mois");
        },
        null,
        true
    )

    //update les stats annuelles les premire de l'an a minuit
    new CronJob(
        '0 0 1 1 * * ',
        () => {
            computeStats(365, "stats_general_annee","stats_autres_annee");
        },
        null,
        true
    )
    console.log("All cronjobs initiated")
}