import axios from "axios";
import {
	getToken
} from "./wxtools";
import {
	ACCESS_TOKEN,
	USER_NAME,
	USER_INFO
} from "./constants"
import nprogress from "nprogress";
import "nprogress/nprogress.css";
import router from "../router";

// export const serverUrl = "http://localhost:8080/jeecg-boot";
export const frontUrl = "http://aaa.tomhonsom.com.cn";
export const serverUrl = frontUrl + "/jeecgboot";

const instance = axios.create({
	baseURL: serverUrl,
	timeout: 5000,
});

// 添加请求拦截器
instance.interceptors.request.use(
	function(config) {
		nprogress.start();
		// 在发送请求之前做些什么  
		let tmptoken = getToken();
		config.headers['token'] = tmptoken; //设置请求头
		return config;
	},
	function(error) {
		// 对请求错误做些什么
		return Promise.reject(error);
	}
);

// 添加响应拦截器
instance.interceptors.response.use(
	function(response) {
		nprogress.done();
		// 2xx 范围内的状态码都会触发该函数。
		// 对响应数据做点什么
		//响应，如果有需要可以在这里处理状态码
		return response.data;
	},
	function(error) {
		// nprogress.done();
		// 超出 2xx 范围的状态码都会触发该函数。
		// 对响应错误做点什么
		if (error.response.status === 401) {
			// 删除用户信息
			// const store = useUserStore()
			// store.delUser()
			// 跳转登录，带上接口失效所在页面的地址，登录完成后回跳使用
			router.push("/login");
		}		
		return Promise.reject(error);
	}
);

export const get = (url, params) => instance.get(serverUrl + url, {
	params
});

export const post = (url, data) => instance.post(serverUrl + url, data);

export const put = (url, data) => instance.put(serverUrl + url, data);

export const del = (url) => instance.delete(serverUrl + url);


//封装微信登录接口
export const wxLogin = (appid, url) => {
	let redirect_uri = encodeURIComponent(frontUrl + url)
	window.location.href =
		`https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${redirect_uri}&response_type=code&scope=snsapi_userinfo&state=STATUS#wechat_redirect`
}

// 获取url上的参数
export const getUrlParam = (name) => {
	let reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象
	let r = window.location.search.substr(1).match(reg); //匹配目标参数
	if (r != null) return decodeURIComponent(r[2]);
	return null; //返回参数值　
}