const router = require('express').Router()
const jwt = require('jsonwebtoken')
const { JWT_SECRET } = require('./constants')
const { registrationUser, signInUser } = require('./db')
const { requiredFields, responseWrapper } = require('./utils')

router.get('/healthcheck', (req, res) => {
    res.send(true)
})

router.post('/registration', requiredFields(['email', 'login', 'password']), async (req, res, next) => {
    const { email, login, password, ...rest } = req.body

    try {
        await registrationUser({
            email, login, password, ...rest,
        })

        res.send(responseWrapper(undefined, {
        }))
    } catch (e) {
        next(e)
    }
})

router.post('/sign-in', requiredFields(['email', 'password']), async (req, res, next) => {
    const { email, password } = req.body

    try {
        const user = await signInUser({
            email, password,
        })

        req.session.user = user

        const token = jwt.sign({
            id: user._id,
        }, JWT_SECRET)

        res.send(responseWrapper(undefined, {
            token, user,
        }))
    } catch (e) {
        next(e)
    }
})

module.exports = router