log = require 'winston'
errors = require '../commons/errors'
handlers = require('../commons/mapping').handlers

mongoose = require 'mongoose'

module.exports.setup = (app) ->
  app.post '/admin/*', (req, res) ->
    # TODO apparently I can leave this out as long as I use res.send
    res.setHeader('Content-Type', 'application/json')

    module = req.path[7..]
    parts = module.split('/')
    module = parts[0]

    return errors.forbidden(res, 'Admins only') unless req.user?.isAdmin()

    try
      moduleName = module.replace '.', '_'
      name = handlers[moduleName]
      return errors.notFound res, 'Handler not found for ' + moduleName unless name?

      handler = require('../' + name)
      return handler[parts[1]](req, res, parts[2..]...) if parts[1] of handler
      return errors.notFound res, 'Method not found for handler ' + name

    catch error
      log.error("Error trying db method '#{req.route.method}' route '#{parts}' from #{name}: #{error}")
      errors.notFound(res, "Route #{req.path} not found.")