import configService from './baseurl.js'
import { msg as toast, showConfirm, tansParams } from './common.js'
import { getToken } from './auth.js'
import errorCode from './errorCode.js'
// 联调时调整:
// 1.configService 的url
// 2.请求头headers
// 3.返回数据格式

const BASE_URL = configService.apiUrl;
let timeout = 10000

const request = config => {
	const isToken = (config.headers || {}).isToken === false;
	config.headers = config.headers || {};

	if (getToken() && !isToken) {
		config.headers['Authorization'] = getToken();
	}

	if (config.params) {
		let url = config.url + '?' + tansParams(config.params);
		url = url.slice(0, -1); // 去掉最后一个&
		config.url = url;
	}

	return new Promise((resolve, reject) => {
		uni.request({
				method: config.method || 'get',
				timeout: config.timeout || timeout,
				url: config.baseUrl || BASE_URL + config.url,
				data: config.data,
				header: config.headers,
				dataType: 'json'
			}).then(res => {
				const code = res.data.code || 0;
				const msg = errorCode[code] || res.data.message || errorCode['default'];
				if (code === 401) {
					showConfirm('登录状态已过期，您可以继续留在该页面，或者重新登录?').then(res => {
						if (res.confirm) {
							uni.reLaunch({
								url: '/pages/initial/initial'
							});
						}
					});
					reject('无效的会话，或者会话已过期，请重新登录。');
				} else if (code === 500) {
					toast(msg);
					reject('500');
				} else if (code === 403) {
					toast(msg);
					reject('403');
				} else if (code !== 0) {
					toast(msg);
					reject(code);
				}
				resolve(res.data);
			})
			.catch(error => {
				let {
					message
				} = error;
				if (message === 'Network Error') {
					message = '后端接口连接异常';
				} else if (message && message.indexOf('timeout')!==-1) {
					message = '系统接口请求超时';
				} else if (message && message.indexOf('Request failed with status code')!==-1) {
					message = '系统接口' + message.substr(message.length - 3) + '异常';
				}
				toast(message);
				reject(message);
			});
	});
};

export default request;
