import { AxiosResponse, InternalAxiosRequestConfig } from './types'
import { ElMessage } from 'element-plus'
import qs from 'qs'
import { SUCCESS_CODE, EXPIRE_CODE, TRANSFORM_REQUEST_DATA } from '../constants'
// @ts-ignore
import { API_URL_MESSAGE_TIP } from '@/utils/messageApi'
import { API_URL_MESSAGE_TIP_COMMON } from '../api/messageApi'

// import { useUserStoreWithOut } from '@common/src/store/modules/user'
import { objToFormData } from '../utils'
import { useUserStoreWithOut } from '../store/modules/user'
import { usePermissionStoreWithOut } from '../store/modules/permission'

const defaultRequestInterceptors = (config: InternalAxiosRequestConfig) => {
  if (
    config.method === 'post' &&
    config.headers['Content-Type'] === 'application/x-www-form-urlencoded'
  ) {
    config.data = qs.stringify(config.data)
  } else if (
    TRANSFORM_REQUEST_DATA &&
    config.method === 'post' &&
    config.headers['Content-Type'] === 'multipart/form-data' &&
    !(config.data instanceof FormData)
  ) {
    config.data = objToFormData(config.data)
  }
  if (config.method === 'get' && config.params) {
    let url = config.url as string
    url += '?'
    const keys = Object.keys(config.params)
    for (const key of keys) {
      if (config.params[key] !== void 0 && config.params[key] !== null) {
        url += `${key}=${encodeURIComponent(config.params[key])}&`
      }
    }
    url = url.substring(0, url.length - 1)
    config.params = {}
    config.url = url
  }
  return config
}

const defaultResponseInterceptors = (response: AxiosResponse) => {
  if (response.data.code === EXPIRE_CODE) {
    ElMessage.warning('权限认证已过期，即将离开本页面')
    setTimeout(() => {
      const userStore = useUserStoreWithOut()
      if (sessionStorage.getItem('flag')) {
        const usePermissionStore = usePermissionStoreWithOut()
        userStore.setToken('')
        userStore.setUserInfo(undefined)
        userStore.setRoleRouters([])
        usePermissionStore.resetAddRouters()
        window.location.href = response?.data?.attachments?.loginUrl
      } else {
        userStore.reset()
      }
    }, 3000)
    return
  }
  if (response.data.success) {
    const url: any = response?.config?.url?.split('?')[0]
    // 统一处理需要展示提示信息的接口
    if (API_URL_MESSAGE_TIP.includes(url) || API_URL_MESSAGE_TIP_COMMON.includes(url)) {
      ElMessage.success(response?.data?.message)
    }
  }
  // console.log(response)
  if (response?.config?.responseType === 'blob') {
    // 如果是文件流，直接过
    // 当前业务处理形式  如果是文件流，直接过
    return {
      data: response.data,
      name: response?.headers?.['content-disposition'] || '导出文件.xlsx'
    }
  } else if (response.data.success || response.data.code === SUCCESS_CODE) {
    return response.data
  } else {
    ElMessage.error(response?.data?.message || 'Error Response')
  }
}

export { defaultResponseInterceptors, defaultRequestInterceptors }
