//免登录接口
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
	let xueApiUrl = globalUrl.ucenterUrl.xueUrl
	
	function toLoginPage(){
		const app = getApp()
		let curpath = vm.$Route.path
		if(curpath == '/pages/login/index') {
			// 如果已经在登录页，无需再次跳转
			return 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 = vm.vuex_token
		// if(!token && noLoginUrl.indexOf(config.url)<0){
		// 	toLoginPage()
		// 	return false
		// }
		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 || config.url.indexOf(xueApiUrl)>-1){
			// php端增加header Authorization
			config.header['Authorization'] = token
		}
		
		config.header['token'] = token;
		config.header['x-requested-with'] = 'xmlhttprequest';
		return config;
	}
	/**
	 *后台返回的结构有 {header: ', data: {data: 数据 ,message:'', code: ''}', message:'', code: ''}或{header: ', data: 数据, message:'', code: ''}
	 *code有statusCode、code
	 */
	function getCode(res){
		const result = res.data || res
		// let code
		// if(result.hasOwnProperty('statusCode')){
		// 	code = res.statusCode
		// }else if(result.hasOwnProperty('code')){
		// 	code = result.code
		// }
		return result.statusCode || result.code || res.statusCode || res.code
	}
	/**
	 *后台返回的结构有 {header: ', data: {data: 数据 ,message:'', code: ''}', message:'', code: ''}或{header: ', data: 数据, message:'', code: ''}
	 *message有errMsg、message
	 */
	function getMsg(res){
		const result = res.data || res
		let msg = result.message || result.errMsg || res.message || res.errMsg 
		if (msg.indexOf('request:fail') !== -1) {
			msg = '当前网络较差，请重试'
		}
		if(res.code == 200 || res.status == true || msg) {
			return msg
		}
		return msg || '请求错误'
	}
	/**
	 *后台返回的结构有 {header: ', data: {data: 数据 ,message:'', code: ''}', message:'', code: ''}或{header: ', data: 数据, message:'', code: ''}
	 *message有errMsg、message
	 *code有statusCode、code
	 */
	// 响应拦截，判断状态码是否通过
	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 === undefined ? result : result.data, // result.data的值为0， false, '', null的时候也要算有值；undefined的情况下后台返回的是单层即：{header: ', data: 数据, message:'', code: ''}
					code:code,
					message:msg
				};
			case 401:
				// token失效，清空登录信息，同时跳转登录
				vm.$u.vuex('vuex_token', '');
				vm.$u.vuex('vuex_user', null);
				vm.$u.vuex('vuex_wx_uid', '');
				vm.$u.vuex("vuex_settled", null);
				toLoginPage()
			case 403://没有权限访问
			case 500:
				// return result;				
			default:
				return {
					data:result.data == null ? result : result.data,
					code:code,
					message:msg
				};	
				// vm.$u.toast('网络请求错误！');
		}
	}
}
// 将返回值统一封装为直接返回对象的统一封装{data:data,code:200,message:message}形式


export default {
	install
}
