import axios, { AxiosInstance } from 'axios';
import { ElMessage, ElMessageBox, ElLoading } from 'element-plus';
import { Session } from '/@/utils/storage';
import qs from 'qs';
// 配置新建一个 axios 实例
const service: AxiosInstance = axios.create({
	baseURL: import.meta.env.VITE_API_URL,
	timeout: 500000,
	headers: { 'Content-Type': 'application/json' },
	paramsSerializer: {
		serialize(params) {
			return qs.stringify(params, { allowDots: true });
		},
	},
});
let loadings: any;

// 添加请求拦截器
service.interceptors.request.use(
	(config) => {
		// loadings = ElLoading.service({ lock: true })
		if (config.method == 'post' || config.method == 'puts') {
			config.headers['Content-Type'] = 'application/x-www-form-urlencoded'
		}
		if (config.method == 'puts') {
			config.method = 'put'
		}
		if (config.method == 'posts') {
			config.method = 'post'
		}
		// 在发送请求之前做些什么 token
		if (Session.get('token')) {
			config.headers!['accessToken'] = `${Session.get('token')}`;
		}
		return config;
	},
	(error) => {

		// 对请求错误做些什么
		return Promise.reject(error);
	}
);
// 添加响应拦截器
service.interceptors.response.use(
	(response) => {
		// loadings.close()
		if (response.data.code == 500) {
			const res = response.data;
			return res;
		}
		// 对响应数据做点什么
		const res = response.data;
		return res;
	},
	(error) => {
		// loadings.close()
		if (error.response) {
			if (error.response.status == 401) {
				ElMessage.error(error.response.data.msg)
				// ElMessageBox.confirm(error.response.data.msg, '提示', {
				// 	confirmButtonText: '返回登录',
				// 	type: 'warning',
				// 	closeOnClickModal: false,
				// }).then(() => {
				Session.clear()
				window.location.reload()
				// })
				return
			}
		}
		// 对响应错误做点什么
		if (error.message.indexOf('timeout') != -1) {
			elboxshow('网络超时')
		} else if (error.message == 'Network Error') {
			// elboxshow('网络连接错误')
		} else {
			// if (error.response.data) elboxshow(error.response.statusText);
			// else elboxshow('接口路径找不到');
		}
		return Promise.reject(error);
	}
);
function elboxshow(msg: string) {
	ElMessageBox.confirm(msg, '提示', {
		confirmButtonText: '刷新',
		cancelButtonText: '返回登录',
		type: 'warning',
		closeOnClickModal: false
	}).then(() => {
		window.location.reload();
	}).catch(() => {
		Session.clear()
		window.location.reload();
	})

}


// 导出 axios 实例
export default service;
