//免登录接口
import util from '@/utils/util.js'
// let noLoginUrl = [
// 	'/v1/h5/settled/get-settled-info',
// 	'/v1/h5/settled/area',
// 	'/v1/h5/settled/save-info',
// ];
// 这里的vm，就是我们在vue文件里面的this，所以我们能在这里获取vuex的变量，比如存放在里面的token
// 同时，我们也可以在此使用getApp().globalData，如果你把token放在getApp().globalData的话，也是可以使用的
const globalUrl = process.uniEnv || {}

const install = (Vue, vm) => {
	let systemApiUrl = globalUrl.systemUrl.apiUrl
	let ucenterApiUrl = globalUrl.ucenterUrl.apiUrl
	
	function toLoginPage(){
		const app = getApp()
		let jumpLoginStatus
		if(app && app.globalData){
			jumpLoginStatus = app.globalData.jumpLoginStatus
		}
		if(!jumpLoginStatus){
			return
		}
		app.globalData.jumpLoginStatus = false
		vm.$u.route('/pages/login/index');	
	}
	Vue.prototype.$u.http.setConfig({
		baseUrl: systemApiUrl,
		header: {
			'content-type': 'application/json; charset=utf-8'
		},
		originalData: true
	});
	// 请求拦截，配置Token等参数
	Vue.prototype.$u.http.interceptor.request = (config) => {
		const reg = /\?\w+/;
		let token = util.getToken()
		// if(!token && noLoginUrl.indexOf(config.url)<0){
		// 	toLoginPage()
		// 	return false
		// }
		// // const token = app && app.globalData && app.globalData.token || ''
		if(config.url.indexOf('access-token=')>=0 && config.params['access-token']){
			// 给默认参数增加access-token (Java端)
			if(reg.test(config.url)){
				config.url += '&access-token=' + token
			}else{
				config.url += '?access-token=' + token
			}
		}
		if(config.url.indexOf(ucenterApiUrl)>-1){
			// php端增加header Authorization
			config.header['Authorization'] = token
		}
		
		// config.header.token = vm.vuex_token || 'RTOKENe56f873b5823477fa2e15572f8fa7eb3a5fb6f7b';

		config.header['x-requested-with'] = 'xmlhttprequest';
		return config;
	}
	function getCode(res){
		const result = res.data
		let code
		if(res.hasOwnProperty('statusCode')){
			code = res.statusCode
		}else if(result.hasOwnProperty('code')){
			code = result.code
		}
		return code
	}
	function getMsg(res){
		res = res.data || res
		let msg = res.message || res.errMsg || '请求错误'
		return msg
	}
	// 响应拦截，判断状态码是否通过
	Vue.prototype.$u.http.interceptor.response = (res) => {		
		let result = res.data || res;
		let msg = getMsg(res)
		//返回__token__,设置
		// if (res.header.__token__) {
		// 	vm.$u.vuex('vuex__token__', res.header.__token__);
		// }
		const code = getCode(res)
		switch (code) {
			case 1:				
			case 0:
				// return result;
			case 200:
				return {
					data:result.data || result,
					code:code,
					message:msg
				};
			case 401:
				//需要登录的接口，当token 过期时，清掉本地token，到登录页面
				// if (!token) {
				// 	uni.navigateTo({
				// 		url: '/pages/login/index'
				// 	});
				// 	return;
				// }
				toLoginPage()
			case 403://没有权限访问
			case 500:
				// return result;				
			default:
				return {
					data:result,
					code:code,
					message:msg
				};	
				// vm.$u.toast('网络请求错误！');
		}
	}
}
// 将返回值统一封装为直接返回对象的统一封装{data:data,code:200,message:message}形式


export default {
	install
}
