module.exports = {
    friendlyName: "Find",

    description: "Find Emplois Eleve.",

    inputs: {
        matricule: {
            type: "string",
            require: true
        },
        anneeScolaire: {
            type: "string",
            require: true
        },
        codeClasse: {
            type: "string",
            require: true
        },
        trimSem: {
            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)
        //console.log("INPUTS", user)

        //console.log("INPUTS 2", inputs)

        // 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 ecole!" })
        }
        // 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!" })
        }


        ///aFIN

        if (inputs.codeClasse === '' || inputs.codeClasse === null || inputs.codeClasse === undefined) {
            inputs.codeClasse = undefined
        }

        /*if (inputs.matricule === '' || inputs.matricule === undefined || inputs.matricule === null || inputs.matricule === 'undefined') {
            inputs.matricule = undefined
        }*/
        //// FIN

        let userCodeEcole;
        if (user.typeUser === 'PARENT') {
            // Code de l'ECOLE concernée
            userCodeEcole = user.codeEcole
            // Go chercher le code de la classe de l'Eleve envoyé
            // GO chercher codeClasse ELEVE
            let classeEleve = await AttributionClasse.find({ codeEcole: user.codeEcole, matricule: inputs.matricule/*, trimSem: inputs.trimSem || 1*/, anneeScolaire: inputs.anneeScolaire }).then(_.first);

            if (classeEleve) {
                inputs.codeClasse = classeEleve.codeClasse
            } else {
                return exits.notFound({ message: "Vous devez etre affecté a une classe pour accéder a cette page!" })

            }
        } else if (user.typeUser === 'ELEVE') {
            userCodeEcole = user.codeEcole

            // JE VAIS CHERCHER L'ELEVE ET JE REMPLACE SON CODE USER PAR SON MATRICULE POUR LA SUITE DES OPERATION
            //PAS BESOINS
            let eleve = await Eleves.find({ nom: user.nom }).then(_.first)
            if (eleve) {
                inputs.matricule = eleve.matricule
                user.codeUser = eleve.matricule
            } else {
                return exits.notFound({ message: "Veuillez inscrire cet eleve dans la base!" })

            }

            // GO chercher codeClasse ELEVE
            let classeEleve = await AttributionClasse.find({ codeEcole: user.codeEcole, matricule: user.codeUser /*eleve.matricule/, trimSem: inputs.trimSem || 1*/, anneeScolaire: inputs.anneeScolaire }).then(_.first);

            if (classeEleve) {
                inputs.codeClasse = classeEleve.codeClasse
            } else {
                return exits.notFound({ message: "Vous devez etre affecté a une classe pour accéder a cette page!" })

            }

        } else {
            return exits.notFound({ message: "Vous n'etes pas autoriser a accéder a cette page!" })

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

        if (inputs.matricule === '' || inputs.matricule === null || inputs.matricule === undefined) {
            return exits.notFound({ message: "Veuillez préciser un matricule pour a accéder a cette page!" })
        }

        let emplois = await EmploisDuTemps.find({
            codeEcole: userCodeEcole,
            codeClasse: inputs.codeClasse,
            anneeScolaire: inputs.anneeScolaire ? inputs.anneeScolaire : undefined,

        })
            .then(emplois => {
                return Promise.all(emplois.map(async emploi => {
                    let matiere = await AttributionMatiere.find({
                        codeClasse: inputs.codeClasse,
                        codeMatiere: emploi.codeMatiere
                    }).then(_.first)
                    if(matiere){
                        emploi.libelleMatiere = matiere.libelleCourt
                    }

                    return emploi
                }))
            }
            )
        // All done. 
        return exits.success(emplois);

        
    },
};
