SocketIoPkgJson = require('socket.io-client/package.json')

Base = require('../base')
ClientInfo = require('./client_info')
NodejsExportsLoader = require('./nodejs_exports_loader')


debug = Base.logger('ix-publisher')

publishedExportInfo = null


exports.publishAndFindProxy = (ixApiDir) ->
  NodejsExportsLoader.loadIxExports(ixApiDir)
  .then (methodInfo) ->
    exports.publishExportsAndGetProxy(methodInfo)

exports.publishExportsAndGetProxy = (exportInfo) ->
  debug('sioVer', SocketIoPkgJson.version)
  publishedExportInfo = exportInfo
  ClientInfo.clientInfo()
  .then (clientInfo) ->
    Base.apiQ
      url:
        pathname: '/ix/publishAndProxy'
        query: { sioVer: SocketIoPkgJson.version }
      data:
        exportInfo: exportInfo
        device:
          key: clientInfo.deviceKey
          secret: clientInfo.deviceSecret
        deviceKey: clientInfo.deviceKey
        deviceSecret: clientInfo.deviceSecret
        ec2Zone: clientInfo.ec2Zone
      method: 'POST'

exports.publishHttpAndFindProxy = ->
  ClientInfo.clientInfo()
  .then (clientInfo) ->
    Base.apiQ
      url:
        pathname: '/ix/httpAndProxy'
      data:
        device:
          key: clientInfo.deviceKey
          secret: clientInfo.deviceSecret
        deviceKey: clientInfo.deviceKey
        deviceSecret: clientInfo.deviceSecret
        ec2Zone: clientInfo.ec2Zone
      method: 'POST'

exports.getProxyForReconnect = (isHttpProxy) ->
  # TODO: Refactor.
  if isHttpProxy
    exports.publishHttpAndFindProxy()
  else
    exports.publishExportsAndGetProxy(publishedExportInfo)
