import { request } from "@cqsjjb/jjb-common-lib/http.js";
import { useState } from "react";
import { getBaseGateway } from "../../utils";

/**
 * 删除文件
 */
function useDeleteFile(returnType = "object") {
  // loading状态
  const [loading, setLoading] = useState(false);
  // 用于跟踪进行中的请求数量（不暴露给外部）
  let requestCount = 0;

  // 删除文件
  const deleteFile = (options) => {
    if (!options) {
      console.error("【deleteFile】 缺少 options 参数");
      return;
    }

    // 增加请求数量并设置loading状态
    requestCount++;
    if (requestCount > 0) {
      setLoading(true);
    }

    return new Promise((resolve, reject) => {
      const { files = [], single = true } = options;

      if (!files) {
        console.error("【deleteFile】 缺少 files 参数");
        return;
      }
      if (!Array.isArray(files)) {
        console.error("【deleteFile】 的 files 需要是一个数组");
        return;
      }

      // 如果没有文件则直接返回
      if (files.length === 0) {
        requestCount--;
        if (requestCount <= 0) {
          setLoading(false);
        }
        resolve();
        return;
      }

      // 单文件并且没有文件路径则直接返回
      if (single) {
        const firstFile = files[0];
        if (!firstFile.filePath) {
          requestCount--;
          if (requestCount <= 0) {
            setLoading(false);
          }
          resolve();
          return;
        }
      }
      // 多文件并且没有文件id则直接返回
      else {
        const validFiles = files.filter(f => f.id);
        if (validFiles.length === 0) {
          requestCount--;
          if (requestCount <= 0) {
            setLoading(false);
          }
          resolve();
          return;
        }
      }

      // 发送请求
      request(
        single
          ? `/${getBaseGateway()}/imgFiles/delete?filePath=${files[0].filePath}`
          : `/${getBaseGateway()}/imgFiles/ids?ids=${files.filter(f => f.id).map(f => f.id)}`,
        "delete",
      )
        .then((res) => {
          resolve(res.data);
        })
        .catch((err) => {
          reject(err);
        })
        .finally(() => {
          // 减少请求数量并在没有进行中的请求时设置loading为false
          requestCount--;
          if (requestCount <= 0) {
            setLoading(false);
          }
        });
    });
  };

  if (returnType === "array")
    return [loading, deleteFile];
  return { loading, deleteFile };
}

export default useDeleteFile;
