const router = require('express').Router();
const checkPassword = require('pbkdf2-password')();
const jwt = require('jsonwebtoken');
const {EDATEAM_JWT_TOKEN}  = require('./key');

const {getUser, _idToId, getResponse, requiredFields, signUp} = require('./controllers');

router.post('/sign-in', requiredFields(['email','password']), async (req, res)=>{
    try{
        const user = await getUser(req.body);
        
        checkPassword({password:req.body.password, salt:user.salt},async(err, pass, salt, hash )=>{
            if(err){
                throw new Error(err);
            }
            
            if(user.password === hash){
                const {password, salt:_salt, ...rest} = user;
                const token = jwt.sign(_idToId(rest), EDATEAM_JWT_TOKEN);
                return res.send(getResponse(null, token));
            }    
            return res.status(400).send(getResponse('Wrong email or password!'));        
        } )
    }
    catch(error){
        res.status(400).send(getResponse(error.message));
    }
});

router.post('/sign-up', requiredFields(['email', 'login', 'password']), async (req, res) => {
    let error = null
    const data = await signUp(req.body).catch((e) => error = e.message)
    return res.status(error ? 400 : 200).send(getResponse(error, data))
})

module.exports = router;