module.exports = {
    friendlyName: "Find Programme Details",

    description: "Find les détails d'un programme à partir de codeProgramme.",

    inputs: {
        codeProgramme: {
            type: "string",
            required: true
        },
        anneeScolaire: {
            type: "string",
            required: false
        }
    },

    exits: {
        notFound: {
            statusCode: 404
        }
    },

    fn: async function (inputs, exits) {
        const { id, user } = this.req.token;

        // Vérification du code école
        if (user.codeEcole === '' || user.codeEcole === null || user.codeEcole === undefined) {
            return exits.notFound({ message: "Veuillez préciser le code Ecole pour cet utilisateur pour accéder à cette page!" })
        }
        let ecoleVerif = await Ecoles.find({ codeEcole: user.codeEcole }).then(_.first)
        if (!ecoleVerif) {
            return exits.notFound({ message: "Cet utilisateur n'est attribué à aucune école!" })
        }

        // Vérification des permissions
        const allowedRoles = ['ADMIN', 'ADMINISTRATION', 'SECRETARIAT', 'ENSEIGNANT', 'PARENT'];
        if (!allowedRoles.includes(user.typeUser)) {
            return exits.notFound({ message: "Vous n'êtes pas autorisé à accéder à cette page!" })
        }

        // Vérification de l'input
        if (!inputs.codeProgramme) {
            return exits.notFound({ message: "Veuillez préciser le codeProgramme!" })
        }

        // Construction de la condition
        let cond = {
            codeEcole: user.codeEcole,
            codeProgramme: inputs.codeProgramme
        };
        if (inputs.anneeScolaire) {
            cond.anneeScolaire = inputs.anneeScolaire;
        }

        // Pagination optionnelle
        this.req.query.limit = this.req.query.limit || "2000";
        this.req.query.skip = this.req.query.skip || "0";

        let options = {
            ...this.req.query,
            fixCond: cond,
            sort: [{ date: 'DESC' }, { heureDebut: 'DESC' }]
        };

        let details = await sails.helpers
            .paginator(ProgrammeDetails, cond, options)
            .then(async (result) => {
                result.data = await Promise.all(
                    result.data.map(async (detail) => {
                        // Ajout du nom de l'école si besoin
                        /*if (detail.codeEcole) {
                            let ecole = await Ecoles.find({ codeEcole: detail.codeEcole }).then(_.first);
                            if (ecole) detail.nomEcole = ecole.nomEcole;
                        }*/
                        return detail;
                    })
                );
                return result;
            });
            console.log('details', details)
        // All done.
        return exits.success(details);
    },
}; 