import request from "@/utils/request";

/**
 * 获取用户分类
 * @returns {Promise}
 */
export function getUserCate() {
  return request({
    url: `/platform/usercate`,
    method: "get",
  });
}

/**
 * 获取所有文件（支持分页、分类、关键词，与后端 query 一致）
 * @param {Object} [params] page, pageSize, cate, keyword
 * @returns {Promise}
 */
export function getAllFiles(params = {}) {
  return request({
    url: "/platform/allfiles",
    method: "get",
    params,
  });
}

/**
 * 新建文件分组
 * @param {Object} data 文件分组数据
 * @returns {Promise}
 */
export function createFileCate(data) {
  return request({
    url: "/platform/createfilecate",
    method: "post",
    data,
  });
}

/**
 * 重命名文件分组
 * @param {number|string} id 文件分组ID
 * @param {Object} data 文件分组数据
 * @returns {Promise}
 */
export function renameFileCate(id, data) {
  return request({
    url: `/platform/renamefilecate/${id}`,
    method: "post",
    data,
  });
}

/**
 * 删除文件分组
 * @param {number|string} id 文件分组ID
 * @returns {Promise}
 */
export function deleteFileCate(id) {
  return request({
    url: `/platform/deletefilecate/${id}`,
    method: "delete",
  });
}

/**
 * 根据分类ID获取文件
 * @param {number|string} id 分类ID
 * @param {number} page 页码，默认1
 * @param {number} pageSize 每页数量，默认24
 * @param {string} keyword 搜索关键词，可选
 * @returns {Promise}
 */
export function getCateFiles(id, page = 1, pageSize = 24, keyword = "") {
  const params = {
    page,
    pageSize,
  };
  if (keyword) {
    params.keyword = keyword;
  }
  return request({
    url: `/platform/catefiles/${id}`,
    method: "get",
    params,
  });
}

/**
 * 根据文件 ID 获取单条文件信息（非分类列表）
 * @param {number|string} id 文件主键 ID
 * @returns {Promise}
 */
export function getFileById(id) {
  return request({
    url: `/platform/file/${id}`,
    method: "get",
  });
}

/**
 * 上传文件
 * @param {FormData} formData 文件数据
 * @param {Object} options 额外选项
 * @param {string|number} [options.cate] 文件分组，0 为未分类
 * @param {string|number} [options.tuid] 租户用户 yz_tenant_user.id；租户侧上传时传，平台管理员不传
 * @param {(e: { loaded: number; total?: number }) => void} [options.onUploadProgress] 上传进度（浏览器 XHR）
 * @returns {Promise}
 */
export function uploadFile(formData, options = {}) {
  // 0 表示「未分类」，不能用 truthy 判断
  if (options.cate !== undefined && options.cate !== null && options.cate !== "") {
    formData.append("cate", String(options.cate));
  }
  if (options.tuid !== undefined && options.tuid !== null && options.tuid !== "") {
    formData.append("tuid", String(options.tuid));
  }

  const config = {
    url: "/platform/uploadfile",
    method: "post",
    data: formData,
    // 不设置超时时间，等待文件上传完毕；勿设置 Content-Type（由浏览器自动带 boundary）
    timeout: 0,
  };
  if (typeof options.onUploadProgress === "function") {
    config.onUploadProgress = options.onUploadProgress;
  }
  return request(config);
}

/**
 * 更新文件信息
 * @param {number|string} id 文件ID
 * @param {Object} fileData 更新的数据
 * @returns {Promise}
 */
export function updateFile(id, fileData) {
  return request({
    url: `/platform/updatefile/${id}`,
    method: "post",
    data: fileData,
  });
}

/**
 * 删除文件
 * @param {number|string} id 文件ID
 * @returns {Promise}
 */
export function deleteFile(id) {
  return request({
    url: `/platform/deletefile/${id}`,
    method: "delete",
  });
}

/**
 * 删除文件
 * @param {number|string} id 文件ID
 * @returns {Promise}
 */
export function deleteFilePermanently(id) {
  return request({
    url: `/platform/deletefilepermanently/${id}`,
    method: "delete",
  });
}

/**
 * 移动文件
 * @param {number|string} id 文件ID
 * @param {Object} fileData 更新的数据
 * @returns {Promise}
 */
export function moveFile(id, cate) {
  return request({
    url: `/platform/movefile/${id}`,
    method: "get",
    params: { cate },
  });
}

/**
 * 批量删除文件
 * @param {Array} ids 文件ID数组
 * @returns {Promise}
 */
export function batchDeleteFiles(ids) {
  return request({
    url: "/platform/batchdeletefiles",
    method: "post",
    data: { ids },
  });
}

/**
 * 批量彻底删除文件
 * @param {Array} ids 文件ID数组
 * @returns {Promise}
 */
export function batchDeleteFilesPermanently(ids) {
  return request({
    url: "/platform/batchDeleteFilesPermanently",
    method: "post",
    data: { ids },
  });
}

/**
 * 批量移动文件
 * @param {Array} ids 文件ID数组
 * @param {number} cate 目标分类ID
 * @returns {Promise}
 */
export function batchMoveFiles(ids, cate) {
  return request({
    url: "/platform/batchMoveFiles",
    method: "post",
    data: { ids, cate },
  });
}