module.exports = {
    friendlyName: "Find",

    description: "Find Utilisateurs.",

    inputs: {
        search: {
            type: "string",
        },
        role: {
            type: "string",
        },
        anneeScolaire: {
            type: "string",
            // require: true
        },
        codeClasse: {
            type: "string",
            // require: true
        }
    },

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

    fn: async function (inputs, exits) {
        const { id, user } = this.req.token;
        //console.log("ID", id, user.login, user.typeUser, user.codeEcole)

         // VERIFICATION DU CODE ECOLE
         if(user.codeEcole=== '' || user.codeEcole === null || user.codeEcole === undefined){
            return exits.notFound({ message: "Veuillez préciser le code Ecole pour cet utulisateur pour a accéder a cette page!" })
        }
        ecoleVerif = await Ecoles.find({ codeEcole: user.codeEcole }).then(_.first)
        if(!ecoleVerif){
            return exits.notFound({ message: "Cet utilisateur n'est attribué a aucune classe!" })
        }
        // FIN VERIF CODE ECOLE

        // VERIF SI ANNEE SCOLAIRE EST PASSEE
        console.log("Annee Scolaire", inputs.anneeScolaire)
        if(inputs.anneeScolaire=== '' || inputs.anneeScolaire === null || inputs.anneeScolaire === undefined){
            return exits.notFound({ message: "Veuillez préciser une année scolaire pour a accéder a cette page!" })
        }

        this.req.query.limit = this.req.query.limit || "10";
        this.req.query.skip = this.req.query.skip || "0";

        let userCodeEcole;
        if (user.typeUser === 'ADMINISTRATION') {
            userCodeEcole = user.codeEcole
        } else if (user.typeUser === 'ADMIN') {
            userCodeEcole = undefined
        } else {
            return exits.notFound({ message: "Vous n'etes pas autoriser a accéder a cette page!" })

        }
        //console.log("userCodeEcole", userCodeEcole)

        let fixedAttr = ["codeEcole", "codeClasse", "anneeScolaire"];

        /*if(inputs.role === '' || inputs.role === undefined || inputs.role === null || inputs.role === 'undefined'){
            inputs.role = undefined
        }*/
        let cond = {
            codeEcole: userCodeEcole,
            codeClasse: inputs.codeClasse ? inputs.codeClasse : undefined,
            anneeScolaire: inputs.anneeScolaire ? inputs.anneeScolaire : undefined,
            or: [
                { matricule: { contains: inputs.search ? inputs.search.toUpperCase() : "" } },
                { libelle: { contains: inputs.search ? inputs.search.toUpperCase() : "" } },
                //{ nom: { contains: inputs.search ? inputs.search.toUpperCase() : "" } },
            ],
        };
        //console.log("cond", cond)

        let options = {
            ...this.req.query,
            fixCond: _.pick(cond, fixedAttr),
            //sort: "nom ASC",
        };

        
            let scolarites = await sails.helpers
            .paginator(Scolarite, cond, options)
            .then(async (scolarites) => {
                scolarites.data = await Promise.all(
                    scolarites.data.map(async (scolarite) => {
                        if (scolarite.codeClasse) {
                            scolarite.classe = await Classe.find({ codeClasse: scolarite.codeClasse }).then(_.first);
                        }
                        if (scolarite.matricule) {
                            scolarite.eleve = await Eleves.find({ matricule: scolarite.matricule }).then(_.first);
                        }
                        return scolarite
                    })
                );
                return scolarites
            });

      
        
        // All done.
        return exits.success(scolarites);
    },
};
