var Sequelize = require('sequelize');
var sequelize = require('./sequelize');
var Users = require('./user.model');

sequelize
  .authenticate()
  .then(() => {
    console.log('Connection has been established successfully.');
  })
  .catch(err => {
    console.error('Unable to connect to the database:', err);
  });

var Items = sequelize.define('Items', {
	description: Sequelize.STRING,
	price: Sequelize.FLOAT,
    typeItem: Sequelize.INTEGER, // typeDemande
    userId: Sequelize.INTEGER
}, {
	tableItem: 'Items',
});

sequelize.sync()

function getItem(id) {
  return Items.findById(id);
}

function getItemsByDate(page, step, typeItem) {
  var offset = (page * step);
  let where = {}
  if(!isNaN(typeItem)){
      where = {typeItem : typeItem}
  }
  console.log(where)
  return Items.findAll({
    offset: offset,
    limit: offset + step,
    order: [['createdAt', 'DESC']],
    where: where
})
}

function getItemsByUserId(id, page, step, typeItem){
  var offset = (page * step);
  let where = {userId: id}
  if(!isNaN(typeItem)){
      where = {
          typeItem : typeItem,
          userId: id
      }
  }
  return Items.findAll({
    offset: offset,
    limit: offset + step,
    where: where
  });
}

function getItemsByDescription(description, page, step, typeItem) {
  var offset = (page * step);
  let where = { description: { $like: `%${description}%` } }
  if(!isNaN(typeItem)){
      where = {
          description: { $like: `%${description}%` },
          typeItem : typeItem
      }
  }
  console.log(where)
  return Items.findAll({
    offset: offset,
    limit: offset + step,
    order: [['createdAt', 'DESC']],
    where: where
  });
}

function addItem(description, price, userId, typeItem) {
  return Items.create({ description: description, price: price, userId: userId, typeItem : typeItem});
}

function deleteItem(id) {
  return Items.findOne(
    { where: { id: id } }
  )
    .then(function(items) {
      return items.destroy();
    })
}

module.exports = {
    getItem,
    getItemsByDate,
    getItemsByUserId,
    getItemsByDescription,
    addItem,
    deleteItem,
    typeItem : {demande : 1,offre : 2}
}