import Request from './request';
import apiList from './api.js'
const shoproRequest = new Request();
export default function http(url,
	data = {},
	toastBefore = '', // 请求前加载提示
	toastAfter = true, // 请求后错误提示
) {
	let api = getApiPath(url);
	/* 请求之前拦截器 */
	shoproRequest.interceptor.request((config, cancel) => {
		let token = uni.getStorageSync('token') || "";
		if (api.auth && !token) {
			uni.hideLoading();
			uni.showLoading({
				title: '暂未登录，请先登录',
				icon: 'none',
				duration: 2000,
			});

			uni.redirectTo({
				url: '/subpkg/pages/login/index',
				success: function(res) {}
			});
			throw (`暂未登录,已阻止此次API请求: '${api.url}'`);
		}
		token && shoproRequest.setConfig(config => {
			config.header.Authorization = token
		})
		if (toastBefore !== '') {
			uni.showLoading({
				title: toastBefore,
				mask: true
			});
		}
		return config
	});
	/* 请求之后拦截器 */
	shoproRequest.interceptor.response((response) => {
		uni.hideLoading();
		if (response.code != 0 || response.success === false) {
			if (toastAfter) {
				uni.showToast({
					title: response.message || '请求出错,稍后重试',
					icon: 'none',
					duration: 2000,
					mask: true
				});
			}
			// token过期注销
			if (response.code === 161099) {
				if (response.message == '当前登录已失效,请重新登录') {
					uni.showToast({
						title: response.message,
						icon: 'none',
						duration: 2000
					});
					uni.removeStorageSync('token');
				} else {
					uni.showToast({
						title: response.message,
						icon: 'none',
					});
				}
				throw (`登录已过期或注销,已阻止请求: '${api.url}'`);
			}

		}
		return response
	})
	let userType = uni.getStorageSync('userType') || "drug";
	const userPrefix = {
		mcs: "/mcs",
		drug: "/drug"
	}
	return shoproRequest.request({
		url: userPrefix[userType] + typeUrl(api),
		data,
		// url: typeUrl(api),
		method: api.method
	})
}

function typeUrl(api) {
	let tUrl = null;
	let userType = uni.getStorageSync('userType') || "drug";
	if (api.url) {
		tUrl = api.url;
	} else {
		if (userType === 'mcs') {
			tUrl = api.mcsurl;
		}
		if (userType === 'drug') {
			tUrl = api.durgurl;
		}
	}
	return tUrl;

}
// 组装接口路径
function getApiPath(url) {
	let api;
	let apiArray = url.split(".");
	if (apiArray.length == 1) {
		api = {
			auth: true,
			method: "POST",
			url: url,
		}

	} else {
		api = apiList;
		apiArray.forEach(v => {
			api = api[v];
		});
	}
	return api;
}