_           =   require 'lodash'
path        =   require 'path'
colors      =   require 'colors/safe'
express     =   require 'express'
bodyParser  =   require 'body-parser'
favicon     =   require 'serve-favicon'
template    =   require './config-template'
extracter   =   require './extracter'
measurer    =   require './measurer'
dragoner    =   require './dragoner'
app         =   express()

SERVER_PORT     =   8888
SERVER_ADDR     =   "http://localhost:#{SERVER_PORT}"

app.use favicon(path.join(__dirname, '..' ,'art', 'favicon.ico'))
app.use bodyParser.urlencoded( extended: true )
app.use bodyParser.json()
app.use '/', express.static(path.join(__dirname, '..', 'art'))

app.get '/config', (req, res) ->
  res.send template()

app.post '/measure', (req, res, next) ->
  measurer req.body
    .then ->
      res.sendStatus 204
    .catch next

app.post '/dragon', (req, res, next) ->
  dragoner req.body
    .then ->
      res.sendStatus 204
    .catch next

app.post '/extract', (req, res, next) ->
  extracter req.body
    .then ->
      res.sendStatus 204
    .catch next

app.use (req, res, next) ->
  err = new Error 'Not Found'
  next err

app.use (err, req, res, next) ->
  console.log "#{colors.red '[error]'}#{err}"
  res.send err: err

handler = () ->
  app.listen SERVER_PORT, (err) ->
    unless err
      console.log "#{colors.green '[success]'} use your browser to access the #{colors.yellow SERVER_ADDR}"
    else
      throw err

module.exports = handler
