_ = require 'lodash'
errors = require '../errors'

_opts = {
  LoginError: (err, req, res) ->
    redirect_url = "#{req.protocol}://#{req.headers.host}#{req.originalUrl}"
    res.redirect "http://sso2.yingsheng.com/userLogin?from=#{encodeURIComponent redirect_url}"
  TipsError: (err, req, res) ->
    res.render err.message
}

_ajax_opts = {
  LoginError: (err, req, res) ->
    res.json {status: false, errors: 1}
  TipsError: (err, req, res) ->
    res.json {status: false, errors: 2, tips: err.message}
}

module.exports = (opts, ajax_opts) ->
  opts = _.assign _opts, opts
  ajax_opts = _.assign _ajax_opts, ajax_opts
  (err, req, res, next) ->
    if err instanceof errors.LoginError
      if req.xhr
        ajax_opts.LoginError err, req, res
      else
        opts.LoginError err, req, res
    else if err instanceof errors.TipsError
      if req.xhr
        ajax_opts.TipsError err, req, res
      else
        opts.TipsError err, req, res
    else
      if _.has req, 'record'
        if req.xhr
          res.status(500).json {id: req.record.id}
        else
          res.status(500).render '500', {id: req.record.id}
      else
        next err