import { extend } from 'umi-request'
import cleanDeep from 'clean-deep'
import { browser, eventGlobal, getAuth, removeAuth } from '@/helpers/utils'
import { postMessage } from './native-message'
import { ElMessage } from 'element-plus'

export interface SearchInitParams {
  rows?: string | number
  page?: string | number
}

const request = extend({
  // requestType: 'form',
  timeout: 20000,
  timeoutMessage: '请求超时'
})

// request.use(async (ctx, next) => {
//   const { url, options } = ctx.req
//   const prefix = options.prefix || '';
//   const baseUrl: string = url.replace(prefix, '') || '';
//   const linkUrl: string = (ApiRouter as any)[baseUrl];
//   if (linkUrl) {
//     ctx.req.url = prefix + linkUrl;
//   }
//   await next();
// })

// 是否是初始化接口
let initRequest = false

request.interceptors.request.use(
  (url, options: any) => {
    // console.log(url)
    initRequest = options.initRequest || false
    const Authorization = getAuth() || ''
    const authHeaders: any = {}
    //console.log(/open/gi.test(url))
    if (
      Authorization &&
      ![
        '/api-auth/usernameLogin',
        '/api-auth/smsLogin',
        '/api-auth/code/sendSms'
      ].includes(url) /*&&
      !/open/gi.test(url)*/
    ) {
      authHeaders.Authorization = Authorization
    }
    return {
      url,
      options: {
        ...options,
        params: cleanDeep(options.params),
        headers: {
          ...options.headers,
          ...authHeaders
        }
      }
    }
  },
  { global: false }
)

request.interceptors.response.use(
  async res => {
    if (res.status > 299 || res.status < 200) {
      const msg = '服务器错误，状态码' + res.status
      // 判断是否有资源需要证书，不提示错误信息
      if (res.status === 511) {
        eventGlobal.emit('auth-not-installed');
      } else {
        ElMessage.error(msg)
      }
      throw new Error(msg)
    }
    const data = await res.clone().json()
    if (data.code !== 200 && data.errCode !== 0) {
      const msg = data.msg || data.message || '处理失败，请重试'

      if (data.code === 403 || data.code === 401) {
        // window.location.href = location.origin
        // ElMessage.error(msg)
      }

      if (!(data.code === 403 || data.code === 401)) {
        ElMessage.error(msg)
      }

      if (data.code === 403) {
        removeAuth()
        window.location.href = location.origin + location.pathname
        ElMessage.error('登录已过期，请重新登录')
      }
      throw new Error(msg)
    }
    return res
  },
  { global: false }
)

export default request
