const express = require('express');
const router = express.Router();
const bCrypt = require('bcrypt-nodejs');
const jwt = require('jsonwebtoken');
const Models = require('../../models');

/**
 * Get Auth Status
 */
router.get('/', function(req, res) {
	var token = req.headers['x-access-token'];
	if (!token) return res.status(401).send({ auth: false, message: 'No token provided.' });

	jwt.verify(token, 'super-secret-string', function(err, decoded) {
		if (err)
			return res.status(500).send({ auth: false, message: 'Failed to authenticate token.' });

		res.status(200).send(decoded);
	});
});
/**
 * Login Member and return token
 */
router.post('/login', function(req, res) {
	Models.User.findOne({
		where: {
			handle: req.body.handle
		}
	})
		.then(user => {
			if (!isValidPassword(user, req.body.password)) {
				return res.json({
					message: 'CHECK YOUR PASSWORD'
				});
			}

			let token = jwt.sign({ id: user._id }, 'super-secret-string', {
				expiresIn: 86400 // expires in 24 hours
			});

			let session = req.session;
			session.user = user;
			session.token = token;

			res.json({ auth: 'Yes', token: session.token });
		})
		.catch(() => {
			return res.json({
				message: 'NOT FOUND, HAWS'
			});
		});
});

//router.post('/logout', function(req, res) {});
module.exports = router;

function isValidPassword(user, password) {
	return bCrypt.compareSync(password, user.password);
}
