_ = require 'lodash'
errors = require '../errors/index'
Request = require './httpHelper'
Promise = require 'bluebird'

class API extends Request
  constructor: ->
    super()
    @version = 'v2'

  make_request: ->
    action = @params.action
    delete @params.action

    @option = _.assignIn @option, {
      hostname: @get_and_del_key(@params, 'host') or C.api.v2.host,
      port: @get_and_del_key(@params, 'port') or C.api.v2.port,
      path: C.api.v2.path + action,
    }

    if not @params.app_id
      @params.app_id = C.api.v2.app_id
#    if @params.app_key
#      app_key = @params.app_key
#      delete @params.app_key
#    else
#      app_key = C.api.v2.app_key
    app_key = @get_and_del_key(@params, 'app_key') or C.api.v2.app_key

    signStr = "#{@bubblesort @params}&#{app_key}"
    signStr = signStr.replace /~/g, '%7e'

    @params.sign = @md5(signStr).toLowerCase()
    @option.data = @params

    super()

  dispose_data: (data) ->
    if data.result is -2
      return Promise.reject new errors.ApiError data.msg, data, @version, @action
    Promise.resolve {
      raw: data
    }

module.exports = API