v1 = require './v1'
v2 = require './v2'
v3 = require './v3'
v3_view = require './v3_view'
v4 = require './v4'
_ = require 'lodash'

create_middlewares = (middlewares) ->
  _.map middlewares, (arr) ->
    middleware = arr[0]
    if arr.length >= 2
      new middleware arr[1]
    else
      new middleware()

module.exports = (version, middlewares=[]) ->
  switch version
    when 'v1' then {
      get: (params) ->
        params = _.cloneDeep params
        api = new v1()
        api.middlewares = create_middlewares middlewares
        api.get params
      post: (params) ->
        params = _.cloneDeep params
        api = new v1()
        api.middlewares = create_middlewares middlewares
        api.post params
    }
    when 'v2' then {
      get: (params) ->
        params = _.cloneDeep params
        api = new v2()
        api.middlewares = create_middlewares middlewares
        api.get params
      post: (params) ->
        params = _.cloneDeep params
        api = new v2()
        api.middlewares = create_middlewares middlewares
        api.post params
    }
    when 'v3' then {
      get: (params) ->
        params = _.cloneDeep params
        api = new v3()
        api.middlewares = create_middlewares middlewares
        api.get params
      post: (params, type) ->
        params = _.cloneDeep params
        api = new v3()
        api.middlewares = create_middlewares middlewares
        api.post params, type
    }
    when 'v3_view' then {
      get: (params) ->
        params = _.cloneDeep params
        api = new v3_view()
        api.middlewares = create_middlewares middlewares
        api.get params
      post: (params, type) ->
        params = _.cloneDeep params
        api = new v3_view()
        api.middlewares = create_middlewares middlewares
        api.post params, type
    }
    when 'v4' then {
      get: (params) ->
        params = _.cloneDeep params
        api = new v4()
        api.middlewares = create_middlewares middlewares
        api.get params
      post: (params) ->
        params = _.cloneDeep params
        api = new v4()
        api.middlewares = create_middlewares middlewares
        api.post params
    }
    else
      throw new Error '暂无该版本接口'