
/**
 * Web唐明明
 * 匆匆数载恍如梦，岁月迢迢华发增。
 * 碌碌无为枉半生，一朝惊醒万事空。
 */

import store from '@/store'

// 基础配置
const config = {
	apiUrl	: 'http://api.ahxh.shangkelian.cn/api/',
	timeout	: 60000
}

let loginHintState = false

// 网络请求
const request = (parameter) => {
	// 检查url配置
	if(parameter.url === 'undefined' || parameter.url === ''){
		uni.showToast({
			title: '请求地址不能为空',
			icon : 'none'
		})
		return
	}
	// 注入header
	config.header = {
		'Accept': 'application/json',
		'Authorization': store.getters.getToken || ''
	}
	
	console.log('parameterDbug', parameter)
	
	// 加载提示
	uni.showLoading({
	    title: '加载中',
		mask : true
	});
	// 请求实例
	return new Promise((resolve, reject) => {
		uni.request({
			url		: config.apiUrl + parameter.url,
			timeout	: config.timeout,
			header	: config.header 	|| {},
			data	: parameter.data 	|| {},
			method	: parameter.method	|| 'GET',
			success	: res => {
				if (res.header.Authorization){
					updateToken('token', res.header.Authorization)
				}
				if(res.statusCode === 200){
					uni.hideLoading()
					const resolveData = res.data
					if(resolveData.status_code === 200) {
						resolve(resolveData.data)
						return
					}
					if(resolveData.status_code === 401) {
						loginHint()
						return
					}
					reject(resolveData)
					return
				}
				errToast(res.statusCode)
			}
		})
	})
}

// 文件上传
const uploading = (paths) => {
	uni.showLoading({
	    title: '上传中',
		mask : true
	});
	// 注入header
	config.header = {
		'Accept': 'application/json',
		'Authorization': store.getters.getToken || ''
	}
	// 上传图片
	return new Promise((resolve, reject) => {
		uni.uploadFile({
			url		: config.apiUrl + 'storage/uploads',
			files	: paths,
			header	: config.header || {},
			success : res=>{
				if(res.statusCode === 200){
					uni.hideLoading()
					let updData = JSON.parse(res.data)
					if(updData.status_code === 200){
						resolve(updData.data)
						return
					}
					reject(updData)
					return
				}
				errToast(res.statusCode)
			}
		})
	})
}

// 处理一些http请求错误提示
const errToast = (code) => {
	switch (code){
		case 404:
			uni.showToast({
				title: code + '接口不存在，请联系系统管理员',
				icon : 'none'
			})
			break;
		case 405:
			uni.showToast({
				title: code + '请检查接口请求方式错误',
				icon : 'none'
			})
			break;
		case 500:
			uni.showToast({
				title: code + '服务端错误，请检查服务器信息',
				icon : 'none'
			})
			break;
	}
}

// 更新token
const updateToken = (token) => {
	store.commit('setToken', token)
}

// 处理登录提示
const loginHint = () => {
	if( loginHintState ) return
	if(!loginHintState) loginHintState = true
	updateToken('')
	uni.showModal({
		title: '登录提示',
		content: '您的登录信息已过期，请重新登录',
		confirmColor: '#009B69',
		showCancel:false,
		success: res=> {
			loginHintState = false
			if (res.confirm) uni.reLaunch({
				url: '/pages/equity/index'
			})
		}
	})
}

export {
	request,
	uploading
}
