const bcrypt = require('bcryptjs') ;
const User = require('../models/User') ;
const Student = require('../models/Student') ;
const jwt = require('jsonwebtoken');
const JWT_secret = "Cantileverlabs";

module.exports.Protected = async (req,res,next)=>{
    res.send("Hello User")
}
module.exports.postSignup = async (req , res , next) => {
    try
    {   //we need firstName , lastName , email , password as input
        let firstName = req.body.firstName || " " ;
        let lastName = req.body.lastName  || " " ;
        let email = req.body.email ;
        let password = req.body.password ;
        let user = await User.findOne({email:email}) ;
        if(user)
        {
            res.json({
                message:"User already exist" ,
                type:"error"
            })
        }
        else
        {
            const hashedPass = await bcrypt.hash(password , 12) ;
            user = new User({
                firstName : firstName ,
                lastName : lastName ,
                email : email ,
                password : hashedPass ,
                isAdmin : false
            }) ;
            user = await user.save() ;
            await Student.deleteOne({user:user._id}) ;
            let student = new Student({
                user:user._id 
            })
            student = await student.save() ;
            user.student = student._id ;
            await user.save() ;
            res.json({
                message:"Successfully signed Up" ,
                type:"success"
            })
        }
    }
    catch(err)
    {
        console.log(err);
    }
} ;


module.exports.postSignin = async (req , res , next) => {
    try
    {
        //we need email and password as input  
        let email = req.body.email ;
        let password = req.body.password ;
        let user = await User.findOne({email : email}) ;
        if(user)
        {
            const isMatched = await bcrypt.compare(password , user.password) ;
            if(isMatched)
            {
                const token = jwt.sign({_id:user._id},JWT_secret)
                res.json(
                    {
                        token:token 
                    }
                    )
            }
            else
            {
                res.json({
                    message:"email and password doesn't match" ,
                    type:"error"
                })
            }
        }
        else
        {
            res.json({
                message:"No user with this email exists" ,
                type : "error"
            })
        }
    }
    catch(err)
    {
        console.log(err);
    }
}

module.exports.checkProtected = (req , res , next) => {
    console.log(req.user);
    res.json({
        message:"Protected" ,
        user : req.user 
    })
}