import Request from 'luch-request'
import Global from "./global.js"

let baseURL = Global.baseUrl

let tokenUrl = Global.tokenUrl

//获取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 做异步操作  */
	//toekn过期处理 
		console.log(response);
	//200 返回数据成功 0
	if (response.data.code != 200 && response.data.code !=400) {
		return Promise.reject(response)
	}
	return response.data
}, async (err) => { // 请求错误做点什么
		console.log(err,"////");
	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))
				})
			})
		}
	}
	uni.showToast({
		icon: 'none',
		position: 'bottom',
		title: '网络异常'
	})
	return Promise.reject(err)
})
export {
	http
}
