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

const tools = require('../tools/general');
const { ObjectId } = require('mongodb');

const { IImg } = require('../models/myscheda');

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

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

const RaccoltaCataloghiSchema = new Schema({
  idapp: {
    type: String,
  },
  active: {
    type: Boolean,
    default: false,
  },
  title: {
    type: String,
    index: true,
  },
  foto_raccolta: IImg,

  idPageAssigned: {
    type: String,
  },

  pdf_copertina: IImg,

  nomefile_da_generare: String,

  pdf_generato: String,
  pdf_generato_size: String,
  pdf_generato_stampa: String,
  data_generato: {
    type: Date,
  },
  data_generato_stampa: {
    type: Date,
  },
  pdf_online: String,
  pdf_online_size: String,
  data_online: {
    type: Date,
  },
  pdf_online_stampa: String,
  pdf_online_stampa_size: String,
  data_online_stampa: {
    type: Date,
  },

  lista_cataloghi: [
    {
      type: Schema.Types.ObjectId,
      ref: 'Catalog',
    },
  ],
});

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

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

RaccoltaCataloghiSchema.statics.findAllIdApp = async function (idapp) {
  const RaccoltaCataloghi = this;

  try {
    let arrrec = await RaccoltaCataloghi.find({ idapp }).sort({ title: 1 })
    .populate({
      path: 'lista_cataloghi',
      select: '-lista_prodotti',
    }).lean();

    return arrrec;
  } catch (err) {
    console.error('Errore: ', err);
  }
};

const RaccoltaCataloghi = mongoose.model('RaccoltaCataloghi', RaccoltaCataloghiSchema);

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

module.exports = { RaccoltaCataloghi };
