module.exports = {
    friendlyName: "Find",

    description: "Find Eleves Parents.",

    inputs: {
        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, user.nom, user.codeUser)
        //console.log("ID", id, inputs.codeClasse, inputs.anneeScolaire, inputs.trimSem)

        let eleveMat = await Eleves.find({ nom: user.nom }).then(_.first)
        if (eleveMat) {
            user.codeUser = eleveMat.matricule
        } else {
            return exits.notFound({ message: "Veuillez inscrire cet eleve dans la base!" })

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

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

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

        //JE CHERCHE LE CODE ELEVE DE L'UTILISATEUR QUI EST CONNECTER
    let eleve = await Eleves.find({ matricule: user.codeUser,codeEcole: userCodeEcole,  /*nom: user.nom, */ }).then(_.first);
        if (!eleve) {
            return exits.notFound({ message: "Vous 2 n'etes pas autoriser a accéder a cette page!" })
        }

        // JE CHERCHE LA CLASSE DE L'ELEVE POUR SA SCOLARITE
        let classeCode = await AttributionClasse.find({
            codeEcole: userCodeEcole,
            anneeScolaire: inputs.anneeScolaire ? inputs.anneeScolaire : undefined,
            //trimSem: inputs.trimSem,
            matricule: eleve.matricule
        }).sort("trimSem DESC").then(_.first)
        if (!classeCode) {
            return exits.notFound({ message: "Vous 3 n'etes pas autoriser a accéder a cette page!" })
        }

        // JE DEFINI UNE VVARIABLE POUR STCOKER LES INFOS
        let userInfos = {};

        // JE VAIS CHERCHER TOTAL SCOLARITE DE L'ELEVE
        let totalScolarite = 0;
        let scolarite = await Scolarite.find({
            codeEcole: userCodeEcole,
            codeClasse: classeCode.codeClasse,
            anneeScolaire: inputs.anneeScolaire ? inputs.anneeScolaire : undefined,
            matricule: eleve.matricule
        })
            .then(scolarite => {
                return Promise.all(scolarite.map(async scolar => {
                    // console.log("scolar", userCodeEcole, scolar.anneeScolaire, scolar.matricule, scolar.codeClasse, scolar.codeNatureRecette, scolar.libelle)

                    if (scolar.montantDu && scolar.montantDu !== null) {
                        totalScolarite = totalScolarite + parseInt(scolar.montantDu)
                    }

                    return totalScolarite

                }));
            })

        // console.log("scolarite", scolarite)

        if (scolarite) {
            // Pour cette Scolarite, j'irai chercher les payement deja effecturer dans details paiement
            userInfos.scolarite = totalScolarite;

        }

        let totalQuittance = 0;
        let quittances = await Quittance.find({
            codeEcole: userCodeEcole,
            codeClasse: classeCode.codeClasse,
            anneeScolaire: inputs.anneeScolaire ? inputs.anneeScolaire : undefined,
            matricule: eleve.matricule,
        })
        .then(quittances => {
            return Promise.all(quittances.map(async quittance => {
                // console.log("scolar", userCodeEcole, scolar.anneeScolaire, scolar.matricule, scolar.codeClasse, scolar.codeNatureRecette, scolar.libelle)

                if (quittance.montantPaye && quittance.montantPaye !== null) {
                    totalQuittance = totalQuittance + parseInt(quittance.montantPaye)
                }

                return totalQuittance

            }));
        })
        //console.log("quittances", quittances)

        if (quittances) {
            userInfos.quittance = totalQuittance

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