//Allow user of @ in in require calls. Config in package.json
require('module-alias/register')

let Auth = require('@helpers/Auth')

const express = require('express')
const app = express()
const port = 3000

//Enable json body parsing in requests. Allows me to post data in ajax calls
app.use(express.json())

//Prefix defied by route in nginx config
const prefix = '/api'

//App Auth, all requests will come in with a token, decode the token and set global var
app.use(function(req, res, next){

	let token = req.headers.authorization
	if(token && token != null && typeof token === 'string'){
		Auth.decodeToken(token)
		.then(userData => {

			req.headers.userId = userData.id //Update headers for the rest of the application
			next()
		}).catch(error => {

			res.statusMessage = error //Throw 400 error if token is bad
		    res.status(400).end()
		})
	} else {
		next() //No token. Move along.
	}
})

//Test 
app.get(prefix, (req, res) => res.send('The api is running'))

//Init user endpoint
var user = require('@routes/user')
app.use(prefix+'/user', user)

//Init notes endpoint
var notes = require('@routes/notesController')
app.use(prefix+'/notes', notes)

//Init tags endpoint
var tags = require('@routes/tagsController')
app.use(prefix+'/tags', tags)

//Output running status
app.listen(port, () => console.log(`Listening on port ${port}!`))