let moment = require('moment')

module.exports = {
    friendlyName: "Find",

    description: "Find.",

    inputs: {
        search: {
            type: "string",
        },
        codeClasse: {
            type: "string",
        },
        codeMatiere: {
            type: "string",
        },
        startDate: {
            type: 'string'
        },
        endDate: {
            type: 'string'
        },
        anneeScolaire: {
            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
        if (inputs.codeClasse === '' || inputs.codeClasse === null || inputs.codeClasse === undefined) {
            return exits.notFound({ message: "Veuillez préciser une classe pour a accéder a cette page!" })
        }
        if (inputs.codeMatiere === '' || inputs.codeMatiere === null || inputs.codeMatiere === undefined) {
            return exits.notFound({ message: "Veuillez préciser une matiere pour a accéder a cette page!" })
        }

        if (inputs.startDate === '' || inputs.startDate === undefined || inputs.startDate === null || inputs.startDate === 'undefined') {
            inputs.startDate = undefined
        }else{
            inputs.startDate = moment(inputs.startDate, 'YYYYMMDD').format('YYYY-MM-DD')
        }

        if (inputs.endDate === '' || inputs.endDate === undefined || inputs.endDate === null || inputs.endDate === 'undefined') {
            inputs.endDate = undefined
        } else{
            inputs.endDate = moment(inputs.endDate, 'YYYYMMDD').format('YYYY-MM-DD')
        }
        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!" })
        }
        console.log("DATE", inputs.startDate, inputs.endDate)
        // CONTROLE SUR USER ET RENVOI DES DATA EN FONCTION DE  USER CONNECTER
        // ACCESSIBLE UNIQUE PAR ADMIN ET ADMINISTRATION

        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 if(user.typeUser === 'ENSEIGNANT') {
            userCodeEcole = user.codeEcole
            inputs.codeEnseignant = user.codeUser
        }
        else {
            return exits.notFound({ message: "Vous n'etes pas autoriser a accéder a cette page!" })

        }


        let fixedAttr = ["codeEcole", "codeClasse", "codeMatiere", "anneeScolaire", "dateCours", "codeEnseignant"];
        let cond = {
            codeEcole: userCodeEcole,
            codeMatiere: inputs.codeMatiere,
            codeClasse: inputs.codeClasse,
            anneeScolaire: inputs.anneeScolaire ? inputs.anneeScolaire : undefined,

            dateCours: { '>=': inputs.startDate, '<=': inputs.endDate },
            codeEnseignant: inputs.codeEnseignant ? inputs.codeEnseignant : undefined,

            //codeEntite: codent,
            or: [
                { codeClasse: { contains: inputs.search ? inputs.search.toUpperCase() : "" } },
                { codeMatiere: { contains: inputs.search ? inputs.search.toUpperCase() : "" } },
                // { telephone: { contains: inputs.search ? inputs.search.toUpperCase() : "" } },
            ],
        };
        let options = {
            ...this.req.query,
            fixCond: _.pick(cond, fixedAttr),
            sort: "dateCours DESC",
        };

        let presences = await sails.helpers.paginator(AbscencePresence, cond, options)
            .then(async (presences) => {
                presences.data = await Promise.all(
                    presences.data.map(async (presence) => {
                        let eleves = await AbscencePresenceDetails.find({ codeAbscence: presence.codeAbscence, codeEcole: userCodeEcole })
                        .then(eleves => {
                            return Promise.all(eleves.map(async eleve => {
                              //console.log('eleves', eleves)
                    
                              let info = await Eleves.find({ matricule: eleve.matricule }).then(_.first)
                              if (info) {
                                eleve.nom = info.nom
                                eleve.sexe = info.sexe
                              } 
                              return eleve;
                            }))
                          })
                        if (eleves) {
                            presence.eleves = eleves
                        }
                        return presence
                    })
                );
                return presences
            });

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