//导入模块. 包提供的类
import WxRequest from 'mina-request'
//导入封装的本地存储操作模块
import { getStorage, clearStorage } from './storage'
//导入封装的增强Api
import { toast } from './extendApi' 

// 对 WxRequest 进行实例化
const instance = new WxRequest({
  /**/ 
  baseURL: 'http://172.20.10.2:8600/student-api', // 使用时请换成真实接口
  timeout: 1000, // 超时时长
  isLoading: false // 是否使用默认的 loading 效果
})

// //请求拦截器（在请求发送之前对请求参数进行新增或者修改）
// instance.interceptors.request = (config) => {
//   // 在发送请求之前做些什么
//   //访问令牌token？
//     //获取token，并补充到请求头中
//   const token = getStorage('token')
//     //判断token是否存在
//     if  (token){
//       config.header['token'] = token
//     }

//   return config
// }



//添加响应拦截器（在服务器相应数据以后，对返回的数据进行逻辑处理）
instance.interceptors.response = async(response) => {
// 对响应数据做点什么

  // response.statusCode // http 响应状态码  
  // response.config // 网络请求请求参数
  // response.data 服务器响应的真正数据  
  
  //reponse 服务器相应的数据 只不过数据被wx.request 进行了一层包装
  // console.log(response.data)

  //response.config 封装的包里面提供的 config 属性 是请求的参数信息
  //可以使用请求参数进行代码的调试

  //response.data 服务器真正响应的数据
  //response.isSuccess 判断代码执行了哪一个回调函数
  //ture--> 执行wx.request 的success回调函数
  //flase ->fail回调函数

  //从response对象中结构两个数据
  const  {isSuccess, data } = response

  //isSuccess=false 网络有问题
  if(!isSuccess){
    toast({
      title: '网络异常请重试',
      icon: 'error'
    })

    return Promise.reject(response)
  }
  //isSuccess = true -->得到success回调函数
  //需要对服务器返回的参数进行逻辑判断
  //需要对后端返回的业务状态码进行判断
  //状态码==200 接口调用成功，服务器成功返回了数据
  //状态码==208 没有token或者token失效 需要用户重新登录
  //else 其他异常 ，给用户统一进行提示
  switch (data.code) {
    case 200:
      //状态码==200 接口调用成功，服务器成功返回了数据，只需要将数据简化以后返回即可
        return data
    
    case 208:
      //返回一个模态对话框
        const res =  wx.showModal({
          content: '鉴权失败，请重新登录',
          showCancel: false
          })
            
          if (res) {
            //既然用户需要重新进行登录，不妨清除掉已经过期了的token
            clearStorage()

            wx.navigateTo({
                url: '/pages/login/login',//重新登陆
              })
        }

        return Promise.reject(response)

        default:
          toast({
            title:'程序出现异常，请联系客服或稍后重试'
          })
 
  }
  //return response
}
  
  

  //导出实例
export default instance