var Sequelize = require('sequelize');
var sequelize = require('./sequelize');
const moment = require('moment')

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

var Users = sequelize.define('Users', {
	uName: {
		type : Sequelize.STRING,
		allowNull: false,
		unique: true,
	},
	fName: Sequelize.STRING,
	lName: Sequelize.STRING,
	phoneNumber: Sequelize.STRING,
	token: Sequelize.STRING,
	expires: Sequelize.DATE
},{
	timestamps: false,
	tableUser: 'Users',
});

sequelize.sync({force:true})

function refreshUser(user){
	expiresTime = user.toJSON().expires
	if( moment.duration(moment(expiresTime).diff(moment())).asHours() < 23){
		user.updateAttributes({
			expires : moment().add(1,'days')
		})
	}
}
function refreshById(id,timeLeft){
	if( moment.duration(moment(user.expires).diff(moment())).asHours() < 23){
		return true;
	}else{
		return false;
	}
}

function getUser(id) {
	return Users.findById(id);
}

function getUserUName(uName) {
	return Users.findOne(
		{ where: { uName: uName } }
	);
}

function authUser(userInfos) {
	return Users.upsert(
		userInfos
	).then(function(users) {
		return users;
	}).catch((err) => {
		console.log(err)
	})
}

function isAuthed(uName,token){
	return Users.findOne({where : {uName : uName, token : token}});
}

function addUser(uName, fName, lName, phoneNumber, token, expires) {
	return Users.create({ uName: uName, fName: fName, lName: lName, phoneNumber: phoneNumber, token : token, expires : expires });
}

function deleteUser(id) {
	return Users.findOne(
		{ where: { id: id } }
	)
		.then(function(users) {
			return users.destroy();
		}).catch((err) => {
		console.log(err)
	})
}

module.exports = {getUser, addUser, deleteUser, authUser, refreshUser,getUserUName}