import type { AxiosInstance } from 'axios';

import axios from 'axios';

// 这里 环境判断 自行替换
const IS_PROD = false;
import { message } from 'antd/message';

const { VITE_API_URL, VITE_API_PROXY, VITE_PUBLIC_PATH } = import.meta.env;

const HTTP_PROXY = `${VITE_PUBLIC_PATH}${VITE_API_PROXY}`;
// 基础URL
export const BASE_URL = IS_PROD ? VITE_API_URL : HTTP_PROXY;

export const dio: AxiosInstance = axios.create({
	// 设置baseUr地址,如果通过proxy跨域可直接填写base地址
	baseURL: BASE_URL,
	// 定义统一的请求头部
	headers: {
		'Content-Type': 'application/json',
	},
	// 配置请求超时时间
	timeout: 30000,
	// http 状态码判断
	validateStatus(status: number) {
		switch (status) {
			case 200:
				// window.location.href = VITE_PUBLIC_PATH + 404;
				break;
			case 400:
				message.error({ type: 'error', content: '请求无效或格式错误！' });
				break;
			case 401:
				message.error({ type: 'error', content: '登录过期,请重新登陆！' });
				break;
			case 403:
				message.error({ type: 'error', content: '服务器拒绝请求！' });
				break;
			case 404:
				message.error({ type: 'error', content: '资源未找到' });
				break;
			case 500:
				message.error({ type: 'error', content: '服务器内部错误' });
				break;
			case 502:
				message.error({ type: 'error', content: '网关或代理服务器收到无效响应' });
				break;
			case 503:
				message.error({ type: 'error', content: '服务器暂时无法处理请求' });
				break;
		}

		return true;
	},
});
// 请求拦截
dio.interceptors.request.use(
	(config) => {
		config.headers['Authorization'] = `Bearer 【auth -> replace】`;
		return config;
	},
	(error) => {
		console.error('request interceptors', error);
	},
);

// 响应拦截
dio.interceptors.response.use(
	(response) => {
		// 对响应数据做处理，例如只返回data部分
		if (response.data.code === 4001) {
			// 退出登录逻辑 自己写
			window.location.href = VITE_PUBLIC_PATH + 'login';
		}
		if (response.headers['Authorization']) {
			// 设置 token 自己实现
		}
		return response;
	},
	(error) => Promise.reject(error),
);
