let moment = require('moment')

module.exports = {
    friendlyName: "Find",

    description: "Find.",

    inputs: {
        classe: {
            type: "string",
            require: true
        },
        anneeScolaire: {
            type: "string",
            require: true
        },
        matiere: {
            type: "string",
            require: true
        },
        typeNote: {
            type: "string",
            require: true
        },
        trimSem: {
            type: "string",
            require: true
        },
    },

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

    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.codeUser, inputs.classe, user.codeEcole, inputs.anneeScolaire)

        // VERIFICATION DU CODE ECOLE
        if (user.codeEcole === '' || 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.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!" })
        }
        // Vérification d'affectation pour les professeurs
        if (user.typeUser === 'ENSEIGNANT') {
            const affectationClasse = await EnseignantsClasse.findOne({
                codeEnseignant: user.codeUser,
                codeClasse: inputs.classe,
                codeEcole: user.codeEcole,
                anneeScolaire: inputs.anneeScolaire
            });
            if (!affectationClasse) {
                return exits.notFound({
                    message: "Vous n'êtes pas autorisé à accéder aux données de cette classe. Vous devez être affecté à cette classe."
                });
            }
        }

        let where = {
            anneeScolaire: inputs.anneeScolaire,
            codeClasse: inputs.classe,
            codeMatiere: inputs.matiere,
            typeNote: inputs.typeNote,
            trimSem: inputs.trimSem
        };

        if (user.typeUser === 'ENSEIGNANT') {
            where.codeEcole = user.codeEcole;
            //where.codeEnseignant = user.codeUser;
        } else if (user.typeUser === 'ADMINISTRATION' || user.typeUser === 'SECRETARIAT') {
            where.codeEcole = user.codeEcole;
        } else if (user.typeUser === 'ADMIN') {
            // codeEcole non filtré (toutes écoles)
        } else {
            return exits.notFound({ message: "Vous n'etes pas autoriser a accéder a cette page!" })
        }

        let entete = await ProfNote.find(where).then(_.first)

        if (entete) {
            // Récupérer les notes associées à cette entête
            let notes = await ProfNoteDetails.find({
                codMoy: entete.codMoy,
                anneeScolaire: inputs.anneeScolaire
            });

            // Récupérer les informations des élèves pour chaque matricule
            if (notes && notes.length > 0) {
                for (let note of notes) {
                    if (note.matricule) {
                        try {
                            const eleve = await Eleves.findOne({
                                matricule: note.matricule,
                                codeEcole: user.codeEcole
                            });

                            if (eleve) {
                                note.eleve = {
                                    matricule: eleve.matricule,
                                    nom: eleve.nom,
                                    //prenoms: eleve.prenoms,
                                    //dateNaissance: eleve.dateNaissance,
                                    sexe: eleve.sexe,
                                    // Ajoutez d'autres champs selon vos besoins
                                };
                            } else {
                                note.eleve = null;
                            }
                        } catch (error) {
                            console.error('Erreur lors de la récupération des infos élève pour le matricule:', note.matricule, error);
                            note.eleve = null;
                        }
                    } else {
                        note.eleve = null;
                    }
                }
            }

            return exits.success({
                exists: true,
                entete: entete,
                notes: notes
            });
        } else {
            return exits.success({
                exists: false,
                entete: null,
                notes: []
            });
        }
        // All done.
    },
};
