/**
 * 统一文件上传工具
 * 先调用原接口获取 uploadToken，再用新接口上传
 */
import axios from 'axios'
import Config from '../config'

/**
 * 获取上传token（调用原上传接口）
 * @param {File} file - 要上传的文件
 * @param {String} originalUrl - 原上传接口地址（如 /common/upload）
 * @returns {Promise<String>} uploadToken
 */
// async function getUploadToken(file, originalUrl = '/common/upload') {
//   const formData = new FormData()
//   formData.append('file', file)

//   // 获取原接口的baseURL（通常是Host85）
//   const baseURL = Config.Host85
//   const headers = {}

//   if (sessionStorage.getItem("access_token")) {
//     headers['Access-Token'] = sessionStorage.getItem("access_token")
//   }
//   if (sessionStorage.getItem("lang")) {
//     headers['Language'] = sessionStorage.getItem("lang")
//   }
//   if (sessionStorage.getItem("CLIENT")) {
//     headers['CLIENT'] = sessionStorage.getItem("CLIENT")
//   }

//   try {
//     const response = await axios.post(baseURL + originalUrl, formData, { headers })
//     if (response.data && response.data.code === 200) {
//       // 假设原接口返回的 data 就是 uploadToken，或者返回格式为 {uploadToken: "..."}
//       // 如果返回的是字符串，直接使用；如果是对象，取 uploadToken 字段
//       const token = typeof response.data.data === 'string'
//         ? response.data.data
//         : (response.data.data?.uploadToken || response.data.data)
//       return token
//     } else {
//       throw new Error(response.data?.msg || '获取上传token失败')
//     }
//   } catch (error) {
//     throw new Error(error.response?.data?.msg || error.message || '获取上传token失败')
//   }
// }
async function upload(file, originalUrl = '/common/upload') {
  const formData = new FormData()
  formData.append('file', file)

  // 获取原接口的baseURL（通常是Host85）
  const baseURL = Config.Host85
  const headers = {}

  if (sessionStorage.getItem('access_token')) {
    headers['Access-Token'] = sessionStorage.getItem('access_token')
  }
  if (sessionStorage.getItem('lang')) {
    headers['Language'] = sessionStorage.getItem('lang')
  }
  if (sessionStorage.getItem('CLIENT')) {
    headers['CLIENT'] = sessionStorage.getItem('CLIENT')
  }

  try {
    const response = await axios.post(baseURL + originalUrl, formData, { headers })
    if (response.data && response.data.code === 200) {
      return response
    } else {
      throw new Error(response.data?.msg)
    }
  } catch (error) {
    throw new Error(error.response?.data?.msg || error.message)
  }
}

/**
 * 统一文件上传方法
 * @param {File} file - 要上传的文件
 * @param {String} originalUrl - 原上传接口地址（可选，默认为 /common/upload）
 * @returns {Promise<Object>} 上传结果 {code: 200, data: "文件路径", msg: "..."}
 */
export async function uploadFile(file, originalUrl = '/common/upload') {
  try {
    const response = await upload(file, originalUrl)
    if (response.data && response.data.code === 200) {
      return {
        code: 200,
        data: response.data.data,
        msg: response.data.msg || '上传成功',
      }
    } else {
      throw new Error(response.data?.msg || '上传失败')
    }

    // 1. 先调用原接口获取 uploadToken
    // const uploadToken = await getUploadToken(file, originalUrl)
    // // 2. 使用新接口上传，使用 Host05
    // const formData = new FormData()
    // formData.append('file', file)
    // formData.append('uploadToken', uploadToken)

    // const headers = {}
    // if (sessionStorage.getItem("access_token")) {
    //   headers['Access-Token'] = sessionStorage.getItem("access_token")
    // }
    // if (sessionStorage.getItem("lang")) {
    //   headers['Language'] = sessionStorage.getItem("lang")
    // }
    // if (sessionStorage.getItem("CLIENT")) {
    //   headers['CLIENT'] = sessionStorage.getItem("CLIENT")
    // }

    // const response = await axios.post(
    //   Config.Host05 + '/common/base/upload',
    //   formData,
    //   { headers }
    // )

    // if (response.data && response.data.code === 200) {
    //   return {
    //     code: 200,
    //     data: response.data.data,
    //     msg: response.data.msg || '上传成功'
    //   }
    // } else {
    //   throw new Error(response.data?.msg || '上传失败')
    // }
  } catch (error) {
    return {
      code: 400,
      msg: error.response?.data?.msg || error.message || '上传失败',
    }
  }
}

/**
 * 为 el-upload 组件提供的自定义上传方法
 * @param {Object} option - el-upload 的 option 对象 {file, onSuccess, onError, onProgress}
 * @param {String} originalUrl - 原上传接口地址（可选）
 */
export async function handleUpload(option, originalUrl = '/common/upload') {
  try {
    const result = await uploadFile(option.file, originalUrl)
    if (result.code === 200) {
      option.onSuccess({ ...option, ...result }, option.file)
    } else {
      option.onError(new Error(result.msg))
    }
  } catch (error) {
    option.onError(error)
  }
}
