import axios from 'axios'
import { tansParams } from './common'
import router from '@/router'
import { ElMessage } from 'element-plus'
import { getToken, removeToken} from './token'


// 创建axios实例
const service = axios.create({
  // axios中请求配置有baseURL选项，表示请求URL公共部分
  baseURL: "/api",
  // 超时
  timeout: 60000
})

service.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'

// 请求拦截器
service.interceptors.request.use(
  config => {
    // 是否需要设置 token
    const isToken = (config.headers || {}).isToken === false
    // 每次发送请求之前判断是否存在token
    // 如果存在，则统一在http请求的header都加上token，这样后台根据token判断你的登录状态，进而判断是否有权限访问
    if (getToken() && !isToken) {
      config.headers['Authorization'] = getToken()
    }

    // get请求映射params参数
    if (config.method === 'get' && config.params) {
      let url = config.url + '?' + tansParams(config.params);
      url = url.slice(0, -1);
      config.params = {};
      config.url = url;
    }

    // post和put请求
    if (config.method === 'post' || config.method === 'put') {
      config.data = JSON.stringify(config.data)
    }
    return config
  }
)

// 响应拦截器
service.interceptors.response.use(
  response => {
    const res = response.data
    console.log(res);

    if (res.code !== 200) {
      if (res.code === 401) {
        ElMessage.error("登录失效，请重新登录！")
        removeToken();  // 删除本地token
        router.push("/login")
        return Promise.reject(new Error(res.message || 'Error'))
      } else if (res.code === 403) {
        ElMessage.error('无权访问！')
        return Promise.reject(new Error(res.message || 'Error'))
      }
    }
    return res
  },
  error => {
    console.log('err' + error) // for debug
    if (error.status == 403) {
      ElMessage.error('无权访问！')
    } else {
      ElMessage.error('服务异常！')
    }
    return Promise.reject(error)
  }
)

export default service
