var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var CustomSectionSchema = new Schema(
  {
    field: { type: String, required: true, unique: true },
    name: { type: String, required: true, unique: true },
    icon: String,
  },
  { timestamps: true },
);

/*
 *** Statics ***
 */

// Get all Sections
CustomSectionSchema.statics.getAll = () => {
  return new Promise((resolve, reject) => {
    var query = CustomSection.find();
    query.select('-_id field name icon');
    query
      .exec()
      .then(rows => {
        resolve(rows);
      })
      .catch(err => {
        reject(err);
      });
  });
};

// Get all Sections by Language
CustomSectionSchema.statics.getAllByLanguage = locale => {
  return new Promise((resolve, reject) => {
    var query = CustomSection.find({ locale: locale });
    query.select('-_id field name icon');
    query
      .exec()
      .then(rows => {
        resolve(rows);
      })
      .catch(err => {
        reject(err);
      });
  });
};

// Create Section
CustomSectionSchema.statics.create = section => {
  return new Promise((resolve, reject) => {
    var query = new CustomSection(section);
    query
      .save()
      .then(row => {
        resolve(row);
      })
      .catch(err => {
        if (err.code === 11000)
          reject({
            fn: 'BadParameters',
            message: 'Custom Section already exists',
          });
        else reject(err);
      });
  });
};

// Update Sections
CustomSectionSchema.statics.updateAll = sections => {
  return new Promise((resolve, reject) => {
    CustomSection.deleteMany()
      .then(row => {
        CustomSection.insertMany(sections);
      })
      .then(row => {
        resolve('Sections updated successfully');
      })
      .catch(err => {
        reject(err);
      });
  });
};

// Delete Section
CustomSectionSchema.statics.delete = (field, locale) => {
  return new Promise((resolve, reject) => {
    CustomSection.deleteOne({ field: field, locale: locale })
      .then(res => {
        if (res.deletedCount === 1) resolve('Custom Section deleted');
        else reject({ fn: 'NotFound', message: 'Custom Section not found' });
      })
      .catch(err => {
        reject(err);
      });
  });
};

/*
 *** Methods ***
 */

var CustomSection = mongoose.model('CustomSection', CustomSectionSchema);
CustomSection.syncIndexes();
module.exports = CustomSection;