// 获取环境变量
const { VITE_SERVER_BASEURL } = import.meta.env

// 上传远程升级文件
export const remoteUpgradeUrl = `${VITE_SERVER_BASEURL}/operations/ebikeEcuInfo/upload`
// 上传远程故障图片
export const faultUrl = `${VITE_SERVER_BASEURL}/operations/ebikeBikeOrder/upload`

/**
 * 从图片URL数组下载并上传图片（严格模式：任一失败则整体失败）
 * @param {string[]} urls - 图片URL数组，如 ["http://...", "http://..."]
 * @param {string} uploadUrl - 上传接口地址
 * @param {object} [options] - 可选配置
 * @param {string} [options.name] - 表单字段名（后端接收的 key）
 * @param {object} [options.formData] - 额外表单数据
 * @param {object} [options.header] - 请求头
 * @returns {Promise<Array>} - 成功时返回每个文件的上传响应结果数组
 */
export async function uploadImagesStrict(urls: string[], uploadUrl: string, options: any = {}) {
  if (!Array.isArray(urls) || urls.length === 0) {
    throw new Error('urls 必须是非空数组')
  }

  const {
    name = 'file',
    formData = {},
    header = {},
  } = options

  // 下载单张图片 → 返回本地临时路径
  async function downloadImage(url: string) {
    return new Promise((resolve, reject) => {
      uni.downloadFile({
        url,
        success: (res) => {
          if (res.statusCode === 200) {
            resolve(res.tempFilePath)
          }
          else {
            reject(new Error(`下载失败 [${url}]，状态码: ${res.statusCode}`))
          }
        },
        fail: (err) => {
          reject(new Error(`下载失败 [${url}]：${err.errMsg || err.message}`))
        },
      })
    })
  }

  // 上传单张图片
  async function uploadImage(localPath: any) {
    return new Promise((resolve, reject) => {
      uni.uploadFile({
        url: uploadUrl,
        filePath: localPath,
        name,
        formData,
        header,
        success: (res) => {
          // 注意：uni.uploadFile 的 success 不代表业务成功！
          // 你可能需要解析 res.data 并判断业务状态
          console.log(res.data)
          console.log(JSON.parse(res.data))

          try {
            const data = typeof res.data === 'string' ? JSON.parse(res.data) : res.data
            // 假设后端返回 { code: 200, data: ... } 表示成功
            if (data.code === 200 || res.statusCode === 200) {
              resolve(data.data)
            }
            else {
              reject(new Error(`上传失败：${data.msg || '未知错误'}`))
            }
          }
          catch (e) {
            // 如果无法解析 JSON，也视为失败
            reject(new Error(`上传响应解析失败：${res.data}`))
          }
        },
        fail: (err: any) => {
          reject(new Error(`上传请求失败：${err.errMsg || err.message}`))
        },
      })
    })
  }

  // 并发下载所有图片
  const localPaths = await Promise.all(
    urls.map(url => downloadImage(url)),
  )

  // 并发上传所有图片
  const uploadResults = await Promise.all(
    localPaths.map(path => uploadImage(path)),
  )

  return uploadResults // 全部成功才返回结果数组
}
