'use strict'

angular.module('payrollhero.api').service 'PhApiConfig', ($q, PhRestangularBase, $rootScope, rfc4122) ->
  getOrGenerateAppUID = ->
    if sessionStorage.payrollheroAPIAppUID
      sessionStorage.payrollheroAPIAppUID
    else
      uuid = rfc4122.v4()
      sessionStorage.payrollheroAPIAppUID = uuid
      uuid

  appInfoHeaders = {}
  token = undefined
  appUid = getOrGenerateAppUID()

  @configureAppInfo = (options) ->
    appInfoHeaders = {
      "x-app-name": options.appName || throw "Missing param 'appName'"
      "x-app-version": options.appVersion || throw "missing param 'appVersion'"
      "x-app-uid": appUid
      "x-app-platform": navigator.platform
    }
  @configureToken = (newToken) ->
    token = newToken

  PhRestangularBase.setFullRequestInterceptor (element, operation, route, url, headers, params, httpConfig) ->
    unless( token )
      throw "No token was configured!  Did you call configureToken?"

    _.defaults(headers, appInfoHeaders)
    params.token ||= token
    return {
      element: element,
      params: params,
      headers: headers,
      httpConfig: httpConfig
    }

  return
