fs = require 'fs'
express = require 'express'
path = require 'path'
favicon = require 'serve-favicon'
logger = require 'morgan'
cookieParser = require 'cookie-parser'
bodyParser = require 'body-parser'

db = require './db'

app = express()

# view engine setup
app.set 'views', path.join __dirname, 'views'
app.set 'view engine', '{views}'

# uncomment after placing your favicon in /public
# app.use favicon "#{__dirname}/public/favicon.ico"
app.use logger 'dev'
app.use bodyParser.json()
app.use bodyParser.urlencoded
  extended: false
app.use cookieParser(){css}
app.use express.static "#{__dirname}/src/public"

fs.readdirSync "#{__dirname}/src/controllers"
  .forEach (file)->
    if ~file.indexOf('.js') || ~file.indexOf('.coffee')
      controller = require "#{__dirname}/src/controllers/#{file}"
      app.use controller.path, controller.router

# catch 404 and forward to error handler
app.use (req, res, next) ->
    err = new Error 'Not Found'
    err.status = 404
    next err

# error handlers

# development error handler
# will print stacktrace
if app.get('env') is 'development'
    app.use (err, req, res, next) ->
        res.status err.status or 500
        res.render 'error',
            message: err.message,
            error: err

# production error handler
# no stacktraces leaked to user
app.use (err, req, res, next) ->
    res.status err.status or 500
    res.render 'error',
        message: err.message,
        error: {}

# Set views directory
app.set 'views', "#{__dirname}/src/views"

module.exports = app
