const mongoose = require('mongoose').set('debug', false);
const Schema = mongoose.Schema;

const tools = require('../tools/general');

mongoose.Promise = global.Promise;
mongoose.level = 'F';

// Resolving error Unknown modifier: $pushAll
mongoose.plugin(schema => {
  schema.options.usePushEach = true;
});

const BotSchema = new Schema({
  idapp: {
    type: String,
  },
  page: {
    type: Number,
  },
  index: {
    type: Number,
  },
  riga: {
    type: Number,
  },
  active: {
    type: Boolean,
  },
  lang: {
    type: String,
  },
  main: {
    type: Boolean,
  },
  label: {
    type: String,
  },
  type: {
    type: Number,
  },
  value: {
    type: String,
  },
  visibility: {
    type: Number,  // VISIB_ALL, VISIB_ONLYIF_LOGGED, VISIB_ONLY_ADMIN
  },
  date_updated: {
    type: Date,
  },
});

BotSchema.statics.getFieldsForSearch = function () {
  return [{ field: 'label', type: tools.FieldType.string }]
};

BotSchema.statics.executeQueryTable = function (idapp, params) {
  params.fieldsearch = this.getFieldsForSearch();
  return tools.executeQueryTable(this, idapp, params);
};

BotSchema.statics.DuplicateAllRecords = async function (idapporig, idappdest) {

  return await tools.DuplicateAllRecords(this, idapporig, idappdest);

};


BotSchema.statics.generateBotMenuRecords = async function (idapp) {

  try {
    let arrrec = [
      {
        "page": 1,
        "index": 1,
        "riga": 1,
        "active": true,
        "label": "Vai al Sito",
        "type": 3,
        "value": "{host}",
        "visibility": 0,
        idapp,
        "lang": "it",
        "main": true
      },
      {
        "page": 1,
        "index": 1,
        "riga": 2,
        "active": true,
        "label": "Il mio Profilo",
        "type": 3,
        "value": "{host}/my/{username}",
        "visibility": 1,
        idapp,
        "lang": "it",
        "main": true
      },
      {
        "page": 1,
        "index": 1,
        "riga": 3,
        "active": true,
        "label": "Link da Condividere",
        "type": 2,
        "value": "{host}/registrati/{username}",
        "visibility": 1,
        idapp,
        "lang": "it",
        "main": true,
      },
      {
        "page": 1,
        "index": 2,
        "riga": 1,
        "active": true,
        "label": "🔮 Help",
        "type": 4,
        "value": "",
        "visibility": 0,
        idapp,
        "lang": "it",
        "main": true,
      },
      {
        "page": 1,
        "index": 1,
        "riga": 3,
        "active": true,
        "label": "💁‍♀️ Admin",
        "type": 4,
        "value": "",
        "visibility": 5,
        idapp,
        "lang": "it",
        "main": true
      },
      {
        "page": 1,
        "index": 2,
        "riga": 2,
        "active": true,
        "label": "Imposta Foto Profilo",
        "type": 4,
        "value": "🖼 SetPicProfile",
        "visibility": 1,
        idapp,
        "lang": "it",
        "main": true
      },
      {
        "page": 1,
        "index": 2,
        "riga": 3,
        "active": true,
        "label": "🛠 Strumenti",
        "type": 1,
        "value": "2",
        "visibility": 1,
        idapp,
        "lang": "it",
        "main": true,
      },
      {
        "page": 2,
        "index": 1,
        "riga": 1,
        "active": true,
        "label": "🔑 Cambio Password",
        "type": 4,
        "value": "🔑 SetResetPwd",
        "visibility": 1,
        idapp,
        "lang": "it",
      },
      {
        "page": 2,
        "index": 1,
        "riga": 2,
        "active": true,
        "label": "👉🏻 Indietro",
        "type": 1,
        "value": "1",
        "visibility": 1,
        idapp,
        "lang": "it",
      }];

    const ris = await MyBot.insertMany(arrrec);

    return ris;

  } catch (e) {
    console.error('Err:', e);
  }

}
BotSchema.statics.findAllIdApp = async function (idapp) {
  const Bot = this;

  const myfind = { idapp };

  return await Bot.find(myfind).sort({ page: 1, lang: 1, riga: 1, index: 1 }).lean();
};

const MyBot = mongoose.model('Bot', BotSchema);

MyBot.createIndexes()
  .then(() => { })
  .catch((err) => { throw err; });


module.exports = { MyBot };
