import http from './interface'

export const $http = (url, method, data, json, isAuth, isBuffer) => {
	let authorization = uni.getStorageSync('authorization') || 'Basic cmVucmVuaW86cmVucmVuaW8=';
	let access_token = uni.getStorageSync('access_token') || '';
	//设置请求前拦截器
	http.interceptor.request = (config) => {
		uni.showLoading({
			title: '加载中...'
		})
		config.header = {
			'content-type': json ? 'application/json' : 'application/x-www-form-urlencoded',
			'access_token': access_token
		}
		if (isAuth) config.header.authorization = authorization;
		if (isBuffer) config.responseType = 'arrayBuffer';
	}
	//设置请求结束后拦截器
	http.interceptor.response = async (response) => {
		//判断返回状态 执行相应操作
		uni.hideLoading()
		if ((response.data && response.data.code && response.data.code === 401) ||
			(response.data && response.data.msg && (response.data.msg.indexOf('未授权') > -1 ||
				response.data.msg.indexOf('重新登录') > -1))) {
			return uni.showModal({
				title: '温馨提示',
				content: '当前登录已失效，是否重新登录？',
				success: (res) => {
					if (res.confirm) {
						uni.clearStorageSync();
						uni.reLaunch({
							url: '/pages/login/index'
						})
					}
				}
			})
		}

		// 请根据后端规定的状态码判定
		if (response.data.code === 300) { //token失效
			//	return response.data = await doRequest(response, url)//动态刷新token,并重新完成request请求
		} else {
			if (response.data.code == 10021 && response.data.msg) {
				uni.showToast({
					title: response.data.msg,
					icon: 'none',
					duration: 1500
				})
			}
		}

		return response;
	}
	return http.request({
		method: method,
		url: url,
		dataType: 'json',
		data,
	})
}

async function login() {
	return new Promise(resolve => {
		uni.login({
			provider: 'weixin',
			success(loginRes) {
				resolve(loginRes.code)
			},
			fail() {}
		});
	})
}

function postJson(url, data, json = true, isAuth = true, isBuffer = false) {
	return $http(url, 'POST', data, json, isAuth, isBuffer)
}

function get(url, data, json = true, isAuth = true, isBuffer = false) {

	return $http(url, 'GET', data, json, isAuth, isBuffer)
}

function post(url, data, json = true, isAuth = true, isBuffer = false) {
	return $http(url, 'POST', data, json, isAuth, isBuffer)
}

function put(url, data, json = true, isAuth = true, isBuffer = false) {
	return $http(url, 'PUT', data, json, isAuth, isBuffer)
}

function del(url, data, json = true, isAuth = true, isBuffer = false) {
	return $http(url, 'DELETE', data, json, isAuth, isBuffer)
}

export default {
	postJson,
	get,
	post,
	put,
	del
}