module.exports = {
    friendlyName: "Find",
  
    description: "Find Eleves Classe.",
  
    inputs: {
      search: {
        type: "string",
      },
      trimSem: {
        type: "string",
        require: true
      },
      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!" })
      }
      //// FIN
  
      this.req.query.limit = this.req.query.limit || "10";
      this.req.query.skip = this.req.query.skip || "0";
  
      let userCodeEcole;
      if (user.typeUser === 'ADMINISTRATION' || user.typeUser === 'SECRETARIAT') {
        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", "trimSem"];
  
      /*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,
        trimSem: inputs.trimSem,
  
        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: "rang ASC",
      };
  
  
      let rangEleves = await sails.helpers
        .paginator(AttributionRang, cond, options)
        .then(async (rangEleves) => {
          rangEleves.data = await Promise.all(
            rangEleves.data.map(async (rang) => {
              if (rang.codeClasse) {
                rang.classe = await Classe.find({ codeClasse: rang.codeClasse }).then(_.first);
              }
              if (rang.matricule) {
                rang.eleve = await Eleves.find({ matricule: rang.matricule, }).then(_.first);
  
                let filiation = await Filiation.find({ matricule: rang.matrivule }).then(_.first);
                if (filiation) {
                    rang.parent = await Parents.find({ codeParent: filiation.codeParent }).then(_.first);
                    rang.filiation = filiation
  
                }
              }
              return rang
            })
          );
          return rangEleves
        });
  
  
  
      // All done.
      return exits.success(rangEleves);
    },
  };
  