Promise = require 'bluebird'
moment = require 'moment'

class LogMiddleWare
  constructor: (args) ->
    @req_record = args[0]
    @debug = false
    if args.length > 1
      @debug = args[1]

    @record = {
      status: true
      memo: null
    }

  console: (msg) ->
    if @debug is on
      console.log msg

  start: (request) ->
    @console("start record #{request.action}")
    @record.startTime = moment().format 'x'
    @record.apiVersion = request.version
    @record.apiAction = request.action
    Promise.resolve()

  afterMakeRequest: (request) ->
    @console("#{request.action} make request complete")
    @record.apiParams = request.params
    Promise.resolve()

  error: (request, err) ->
    @console("#{request.action} error")
    if err.name in ['LoginError']
      return Promise.resolve()
    @record.status = false
    @record.memo = JSON.stringify {errorType: err.name, errMsg: err.message}
    Promise.resolve()

  end: (request) ->
    @console("#{request.action} complete")
    @record.endTime = moment().format 'x'
    @req_record.api.push @record
    Promise.resolve()

module.exports = LogMiddleWare