const {Router} = require('express')
const bcrypt = require("bcrypt")
const userModel = require('../models/user')
const postModel = require('../models/UploadModel')
const uploadMiddleware = require('../middlewares/MulterMiddleware')
const multer = require('multer')
const generateToken = require('../utils/generateToken')
const asyncHandler = require('express-async-handler')
const router = Router()



//Log in
router.post('/login',async (req,res) => {
  
    const {email, password} = req.body

    const user = await userModel.findOne({email})

    if(user && (await user.matchPassword(password))){
        res.json({
            _id: user._id,
            email:user.email,
            username:user.username,
            password:user.password,
            token: generateToken(user._id)
        })
        console.log("Successfully logged in")
    }
    else{
       console.log("wrong Credentials")
    }
})



//Create post
router.post("/post", uploadMiddleware.single("photo"), (req,res) => {

    const photo = req.file.filename

    const post = new postModel({name:req.body.name,description: req.body.description, photo: photo})
    post.save()
    .then(console.log("Saved successfully"))

})



//Get posts
router.get('/posts', async (req,res) => {

    const posts = await postModel.find()
    res.send(posts) 
})


//Register
router.post("/register", asyncHandler(async (req,res) => {
    
   const {email,username,password} = req.body

    const userExists = await userModel.findOne({email})

    if(userExists){
        res.status(404)
        throw new Error("User Already exists")
    }

    const user =  new userModel({
        email,
        username,
        password
    })

    if(user){
        res.json({
            _id: user._id,
            email:user.email,
            username:user.username,
            password:user.password,
        })
        await user.save()
    }else{
      console.log("error occured!")
    }
}))

module.exports = router