//引入axios请求
import axios from 'axios'
//引入element-plus里面的消息提示
import {
    ElMessage
} from 'element-plus'

// Token管理
const TOKEN_KEY = 'auth_token'

// 获取token
const getToken = () => {
  return 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkYXRhLWNlbnRlciIsImF1ZCI6IndlYiIsImlzcyI6ImRhdGEtY2VudGVyIiwiZXhwIjozODI1ODM1NTkxLCJpYXQiOjE2NzgzNTE5NTMsImp0aSI6IjI4YmY1NTZjMTc0MDQ3YjJiNTExNWM3NzVhYjhlNWRmIiwidXNlcm5hbWUiOiJzdXBlcl91c2VyIn0.zHyVzsleX2lEqjDBYRpwluu_wy2nZKGl0dw3IUGnKNw'
    // return localStorage.getItem(TOKEN_KEY)
}

// 设置token
const setToken = (token) => {
    localStorage.setItem(TOKEN_KEY, token)
}

// 移除token
const removeToken = () => {
    localStorage.removeItem(TOKEN_KEY)
}

// 导出token管理方法
export { getToken, setToken, removeToken }

const BASE_API = import.meta.env.VITE_BASE_API
// 创建axios实例
const service = axios.create({
    baseURL: BASE_API, //所有的后端接口请求地址前缀部分(没有后端请求不用写)
    timeout: 60000*5 // 请求超时时间,这里15秒
    //withCredentials: true,// 异步请求携带cookie,true为携带,false为不携带
    //请求头里面设置通用传参类型
    /*headers: {
        //设置后端需要的传参类型
        'Content-Type': 'application/json',
        'token': 'x-auth-token',//一开始就要token
        'X-Requested-With': 'XMLHttpRequest',
    }*/
})

// request拦截器
service.interceptors.request.use(config => {
    // 获取token并添加到请求头
    const token = getToken()
    if (token) {
        // 根据curl命令，后端接受的是token字段名，而不是Authorization
        config.headers['token'] = token
        // config.headers['Authorization'] = `Bearer ${token}` // 如果后端需要Bearer格式可以使用这个
    }
    return config
}, error => {
    console.log(error)
    return Promise.reject(error)
})

// response拦截器
service.interceptors.response.use(
    response => {
        //对数据返回做什么
        if (response.data.code == 0) {
            ElMessage({
                message: response.data.message,
                type: 'error',
                duration: 3 * 1000
            })
        }
        return response.data
    },
    error => {
        console.log('err' + error)
        
        // 处理token过期或无效的情况
        if (error.response && (error.response.status === 401 || error.response.status === 403)) {
            ElMessage({
                message: 'Token已过期，请重新登录',
                type: 'error',
                duration: 3 * 1000
            })
            // 清除无效的token
            removeToken()
            // 可以在这里跳转到登录页
            // router.push('/login')
        } else {
            ElMessage({
                message: error.message,
                type: 'error',
                duration: 3 * 1000
            })
        }
        return Promise.reject(error)
    }
)

export default service