import Compressor from "compressorjs";

/**
 * 异步压缩图片文件
 * @param file 原始图片文件
 * @param quality 压缩质量 (0 ~ 1)，默认 0.8
 * @param maxWidth 最大宽度，默认 1920
 * @returns 压缩后的文件对象
 */
export const compressImageFile = (
  file: File,
  quality = 0.8,
  maxWidth = 1920
): Promise<File> => {
  return new Promise((resolve, reject) => {
    // 只有图片类型才进行压缩，直接返回其他文件类型（如 PDF）
    if (!file.type.startsWith("image/")) {
      resolve(file);
      return;
    }

    new Compressor(file, {
      quality,
      maxWidth,
      // 小于 200KB 的图片不不处理
      convertSize: 200000,
      success(result: File | Blob) {
        // compressorjs 可能会返回 Blob，需确保转回 File
        const compressedFile = new File([result], file.name, {
          type: result.type,
          lastModified: Date.now(),
        });
        resolve(compressedFile);
      },
      error(err) {
        // 如果压缩失败，最好打印个警告，然后兜底返回原文件
        console.warn("Image compression failed:", err.message);
        resolve(file);
      },
    });
  });
};
