    import { defaultValue } from '../util'

    /**
     * 服务全局配置，通过服务基地址来进行请求的拦截，多个服务基地址可共用一个拦截器，不同服务可设置的参数不同
     * @class ServiceConfig
     * @moduleEx ServerModule
     * @param {Object} options 构造参数
     * @param {String} [options.tokenKey = 'token'] token名
     * @param {String} [options.tokenValue] token值
     * @param {Object} [options.headers] 请求头信息
     * @param {Array<RequestInterceptor>} [options.requestInterceptors = []] 请求发送前的拦截函数
     * @param {Array<ResponseInterceptor>} [options.responseInterceptors = []] 请求发送完成的拦截函数
     * @example <caption><h7>地图图层(IGSMapImageLayer)设置拦截参数</h7></caption>
     * // 目前IGSMapImageLayer支持设置token，以及服务发送前的处理函数
     * // 设置token名，没有则默认为token
     * // ES5引入方式
     * const { ServiceConfig } = Zondy.Service
     * // ES6引入方式
     * import { ServiceConfig } from "@mapgis/webclient-common
     * ServiceConfig.tokenKey = '新token名'
     * // 设置token值
     * ServiceConfig.tokenValue = '新token值'
     * // 设置请求发送前的参数处理函数，由于服务特殊性，暂时只有这个方法
     * ServiceConfig.requestInterceptors.push({
     *   // 改拦截器要拦截的服务请求地址，单个url就填字符串，多个字符串就填数组
     *   urls: 'http://webclient.smaryun.com:8089/igs/rest/services/Map/Hubei4326/MapServer',
     *   // urls: ['http://webclient.smaryun.com:8089/igs/rest/services/Map/Hubei4326/MapServer'],
     *   // 服务发送前的处理函数
     *   before: function (params) {
     *     // params为在url中拼装的参数
     *     // 处理要显示的图层
     *     params.layers = 'show:0,1'
     *   }
     * })
     *
     * @example <caption><h7>瓦片图层(IGSTileLayer)设置拦截参数</h7></caption>
     * // 目前IGSTileLayer支持设置token，以及服务发送前的处理函数
     * // 设置token名，没有则默认为token
     *  // ES5引入方式
     * const { ServiceConfig } = Zondy.Service
     * // ES6引入方式
     * import { ServiceConfig } from "@mapgis/webclient-common
     * ServiceConfig.tokenKey = '新token名'
     * // 设置token值
     * ServiceConfig.tokenValue = '新token值'
     * // 设置请求发送前的参数处理函数，由于服务特殊性，暂时只有这个方法
     * ServiceConfig.requestInterceptors.push({
     *   // 改拦截器要拦截的服务请求地址，单个url就填字符串，多个字符串就填数组
     *   urls: 'http://webclient.smaryun.com:8089/igs/rest/services/Tile/北京市/TileServer',
     *   // urls: ['http://webclient.smaryun.com:8089/igs/rest/services/Tile/北京市/TileServer'],
     *   // 服务发送前的处理函数，仅可处理url
     *   before: function (url) {
     *     console.log("url:", url)
     *   }
     * })
     */
    const ServiceConfig = {
      tokenKey: 'token',
      tokenValue: undefined,
      headers: undefined,
      requestInterceptors: [],
      responseInterceptors: []
    }

    /**
     * 通过url来获取匹配的request拦截器
     * @param {String} url 要匹配的基地址
     * @param {Array} requestInterceptors 拦截器数组
     * @return {Object} 匹配的拦截器
     * */
    ServiceConfig.getRequestInterceptor = function (url, requestInterceptors) {
      for (let i = 0; i < requestInterceptors.length; i++) {
        let requestUrl = ''
        if (typeof requestInterceptors[i].urls === 'string') {
          if (url === requestInterceptors[i].urls) {
            requestUrl = requestInterceptors[i].urls
          }
        } else if (requestInterceptors[i].urls instanceof Array) {
          for (let j = 0; j < requestInterceptors[i].urls.length; j++) {
            if (url === requestInterceptors[i].urls[j]) {
              requestUrl = requestInterceptors[i].urls[j]
              break
            }
          }
        }
        if (requestUrl) {
          return requestInterceptors[i]
        }
      }

      return undefined
    }

    export default ServiceConfig