// Dependencies
const jwt = require('jsonwebtoken');

// secret
// signature to our token
// could any random string
const secret = "EcommerceAPI";

// token creation function
// user will be depending in our log in controller 
module.exports.createAccessToken = (user) =>{

// this called payload
	const data ={
		id: user._id,
		email:user.email,
		isAdmin:user.isAdmin
	}

	// {}-option only
	// sign-to generate a new token
	return jwt.sign(data,secret,{});
}

// Token Verification Function

// verify - to verify our user/verify middleware
module.exports.verify = (req,res,next) =>{

	// console.log(req.headers.authorization);

	let token = req.headers.authorization;

	if(typeof token === 'undefined'){

		return res.send({
			auth:'Failed. No token'
		});

	} else{
		token = token.slice(7, token.length);
		// console.log (token);

		// Token decryption

		// Validate the token using the "verify" method decrypting the token using the secret code
		jwt.verify(token, secret, function(err, decodedToken){

			if (err){
				return res.send({
					auth: false,
					message:err.message
				});
			}else{
				// console.log(decodedToken);//contains the data from our token

				// user property will be added to request object and will contain our decodedToken
				req.user = decodedToken

				next()
				// middleware function that lets us proceed to the next middleware or controller
			}
		})
	}
}

// create verification if the user is the admin


module.exports.verifyAdmin = (req,res,next) =>{
	// console.log(req.user.isAdmin);
	if(req.user.isAdmin){
		// console.log(req.user.isAdmin)
		next()
	}else{
		return res.send({
			auth:false,
			message:"Action Forbidden"
		})
		
	}
}