_ = require 'lodash'
errors = require '../errors/index'
Request = require './httpHelper'
Promise = require 'bluebird'

class API extends Request
  constructor: ->
    super()
    @version = 'v3'

  post: (@params, @type) ->
    super @params

  make_request: ->
    @option = _.assignIn @option, {
      hostname: @get_and_del_key(@params, 'host') or C.api.v3.host,
      port: @get_and_del_key(@params, 'port') or C.api.v3.port,
      path: C.api.v3.path,
    }
    if C.debug
      @params.isdebug = 1

    if not @params.appkey
      @params.appkey = if @type is 'm' then C.api.Mobile_V3.appkey else C.api.v3.appkey
    if not @params.appsecret
      @params.appsecret = C.api.v3.appsecret

    @params.timestamp = @getUnixTime 8

    signStr = @bubblesort(@params, false).toLowerCase()
    @params.sign = @md5(signStr).toLowerCase()
    delete @params.appsecret
    @option.data = @params

    super()

  dispose_data: (data) ->
    obj = {
      status: true
      raw: data
    }
    if data.status isnt 'OK'
      return Promise.reject new errors.ApiError data.msg, data, @version, @action
    if data.actStatus is 1
      obj.data = data.rps
      obj.msg = ''
    else
      obj.status = false
      obj.data = null
      obj.msg = data.actMsg
    Promise.resolve obj

module.exports = API