import conf from "@/common/config.js"
/**
 * 响应拦截
 * @param {Object} http 
 */
module.exports = (vm) => {
	uni.$u.http.interceptors.response.use((response) => {
		/* 对响应成功做点什么 可使用async await 做异步操作*/

		// 自定义参数
		let _cus = {
			showLoading: true, // 是否显示加载等待框
			loadingTitle: '加载中', // 加载等待框的提示文字
			showFailMessage: true, // 返回失败信息是否显示
			catchError: true, // 是否集中管理Catch,
		}
		if (response.config && response.config.custom)
			Object.assign(_cus, response.config.custom)

		if (200 == response.statusCode) {
			let data = response.data
			if (_cus.catchError) {
				if (data.success) {
					return data.data
				} else {
					let loginTimeoutCode = "5000"
					let loginTimeoutPage = "/pages/login/index"
					if (conf.loginTimeoutCode) {
						loginTimeoutCode = "" + conf.loginTimeoutCode
					}
					if (conf.loginTimeoutPage) {
						loginTimeoutPage = conf.loginTimeoutPage
					}
					if (loginTimeoutCode === data.code) {
						uni.showModal({
							title: '提示',
							content: '登录过期或失效,请重新登录!',
							showCancel: false,
							success: function(res) {
								uni.reLaunch({
									url: loginTimeoutPage
								})
							}
						});
					} else {
						if (_cus.showFailMessage) {
							uni.showToast({
								title: data.msg,
								icon: 'none',
								duration: 2000,
							})
						}
					}
					return Promise.reject(data)
				}
			} else {
				return data
			}
		} else {
			console.log('response.statusCode--', response)
			let em = {
				"code": "" + response.statusCode,
				"data": "",
				"msg": "网络请求失败~",
				"success": false,
				"timestamp": new Date().getTime()
			}
			if (res.data) {
				em.msg = res.data
			}
			if (_cus.showFailMessage) {
				uni.showToast({
					title: em.msg,
					icon: 'none',
					duration: 2000,
				})
			}
			return Promise.reject(em)
		}

		// const data = response.data
		// if (data.code !== 200) { // 服务端返回的状态码不等于200,则reject()
		// 	// 如果没有显式定义custom的toast参数为false的话,默认对报错进行toast弹出提示
		// 	if (custom.toast !== false) {
		// 		uni.$u.toast(data.message)
		// 	}
		// 	// 如果需要catch返回,则进行reject
		// 	if (custom?.catch) {
		// 		return Promise.reject(data)
		// 	} else {
		// 		// 否则返回一个pending中的promise
		// 		return new Promise(() => {})
		// 	}
		// }
		// return data.data || {}
	}, (error) => {
		console.log('request-fail', error)
		let _opts = {
			showLoading: true, // 是否显示加载等待框
			loadingTitle: '加载中', // 加载等待框的提示文字
			showFailMessage: true, // 返回失败信息是否显示
			catchError: true, // 是否集中管理Catch,
		}
		if (error.config && error.config.custom)
			Object.assign(_opts, response.config.custom)
		let em = {
			"code": "600",
			"data": "",
			"msg": "网络请求失败~",
			"success": false,
			"timestamp": new Date().getTime()
		}
		if (404 == error.statusCode) {
			em.code = "404"
			em.msg = "404,请求地址错误"
		}
		if (500 == error.statusCode) {
			em.code = "500"
			em.msg = "500,内部服务错误"
		}
		if (_opts.showFailMessage) {
			uni.showToast({
				title: em.msg,
				icon: 'none',
				duration: 2000,
			})
		}
		return Promise.reject(em)
	})
}