import Request from 'luch-request'

/**
 * 阿里云2ce15942be1999220210d9837b01d37e
 */
// let	baseURL = 'http://8.135.18.59:1889/api/'
// let tokenUrl=baseURL+"/blade-auth/oauth/token?tenant_id=000000&username=admin&password=1ac87efdaf318558f05d1840a94bdd94&grant_type=password&scope=all&type=account"
let baseURL = "http://192.168.1.69"
let tokenUrl=baseURL+"/blade-auth/oauth/token?tenant_id=000000&password=21232f297a57a5a743894a0e4a801fc3&username=admin&grant_type=password"

//获取token
const getTokenStorage = () => {
  let token = ''
  try {
    token = uni.getStorageSync('token')
  } catch (e) {
  }
  return token
}
const http = new Request()
http.setConfig((config) => { /* 设置全局配置 */
  config.baseURL = baseURL  /* 根域名不同 */
  config.header = {
    ...config.header,
  }
  return config
})
http.interceptors.request.use((config) => { /* 请求之前拦截器。可以使用async await 做异步操作 */
  config.header = {
    ...config.header,
    "Blade-Auth": getTokenStorage()
  }
  return config
}, (config) => {
  return Promise.reject(config)
})
// 是否正在刷新的标记
let isRefreshing = false
// 重试队列，每一项将是一个待执行的函数形式
let requests = []
http.interceptors.response.use(async (response) => { /* 请求之后拦截器。可以使用async await 做异步操作  */
	  console.log(response);
	  //200 返回数据成功 0
      return response
  },async (err) => { // 请求错误做点什么
	  //toekn过期处理
		if (err.data.code == 401) {
			let {config} = err
			if (!isRefreshing) {
				isRefreshing = true
				let token = uni.getStorageSync('token')
				let [,res] = await uni.request({
					url: tokenUrl,
					method: 'POST',
					header:{
						Authorization:"Basic c2FiZXI6c2FiZXJfc2VjcmV0"
					
					},
				})
				//否则保存新的token
				token=res.data.token_type+" "+res.data.access_token
				uni.setStorageSync('token', token)
				requests.forEach(cb => cb())
				// 重试完了清空这个队列
				requests = []
				isRefreshing = false
				return http.request(config)
			} else {
				return new Promise((resolve) => {
					// 将resolve放进队列，用一个函数形式来保存，等token刷新后直接执行
					requests.push(() => {
						resolve(http.request(config))
					})
				})
			}
		}
      return Promise.reject(err)
  })
export {
  http
}
