import Request from 'luch-request'
import { useUserStore } from '@/store'

import { getEnvBaseUrl } from '.'
const baseUrl = getEnvBaseUrl()
// 创建请求实例
export const request = new Request({
  baseURL: baseUrl, // 基础请求地址
  timeout: 10000, // 超时时间
}) as Request

// 请求拦截器
request.interceptors.request.use(
  (config) => {
    // 这里可以添加token等请求头
    config.header = {
      'x-token': uni.getStorageSync('x-token') || '', // 从本地存储获取token
    }
    return config
  },
  (error) => {
    return Promise.reject(error)
  },
)

// 响应拦截器
request.interceptors.response.use(
  (response) => {
    const userStore = useUserStore()

    const res = response.data
    // 状态码 2xx，参考 axios 的设计
    if (response.statusCode >= 200 && response.statusCode < 300) {
      return Promise.resolve(res)
    } else if (response.statusCode === 401) {
      // 401错误  -> 清理用户信息，跳转到登录页
      uni.clearStorageSync()
      userStore.clearUserInfo()
      uni.navigateTo({ url: '/pages/login/login' })
      return Promise.reject(res)
    } else {
      // 其他错误 -> 根据后端错误信息轻提示
      uni.showToast({
        icon: 'none',
        title: res.msg || '请求错误',
      })
      return Promise.reject(res)
    }
  },
  (error) => {
    const userStore = useUserStore()
    if (!userStore.userInfo['x-token'] || !uni.getStorageSync('x-token')) {
      uni.navigateTo({
        url: '/pages/login/index',
      })
      return Promise.reject(error)
    }
    uni.showToast({
      icon: 'none',
      title: '网络错误，换个网络试试',
    })
    return Promise.reject(error)
  },
)

export default request
