import httpClient from '@/utils/http';

import {
  ControllerResponse,
  FileServiceBatchFileUploadResponseVO,
  FileServiceFileListResponseVO,
  FileServiceFileResponseVO,
  FileServiceFileStatsVO
} from './data-contracts';
export default {
  /**
   * @description 分页获取文件列表，支持多种过滤条件
   */
  filesList: (query: {
    /**
     * 页码
     * @default 1
     */
    page?: number;
    /**
     * 每页数量
     * @default 10
     */
    page_size?: number;
    /** 文件分类 */
    category?: string;
    /** 上传者ID */
    uploader_id?: number;
    /** 文件状态 */
    status?: string;
    /** 搜索关键词 */
    search?: string;
    /** 开始日期 */
    start_date?: string;
    /** 结束日期 */
    end_date?: string;
    /**
     * 排序字段
     * @default "created_at"
     */
    sort_by?: string;
    /**
     * 排序方向
     * @default "desc"
     */
    sort_order?: string;
  }) => {
    return httpClient.get<
      ControllerResponse & {
        data?: FileServiceFileListResponseVO;
      }
    >(`/files`, { query: query });
  },
  /**
   * @description 批量删除多个文件
   */
  batchDeleteCreate: (file_ids: number[]) => {
    return httpClient.post<
      ControllerResponse & {
        message?: string;
      }
    >(`/files/batch-delete`, { params: file_ids });
  },
  /**
   * @description 批量上传多个文件，最多支持10个文件同时上传
   */
  batchUploadCreate: (data: {
    /** 文件列表 */
    files: File[];
    /** 文件分类 */
    category?: string;
    /** 文件标签 */
    tags?: string;
  }) => {
    return httpClient.formData<
      ControllerResponse & {
        data?: FileServiceBatchFileUploadResponseVO;
      }
    >(`/files/batch-upload`, { params: data });
  },
  /**
   * @description 获取文件相关的统计信息
   */
  statsList: () => {
    return httpClient.get<
      ControllerResponse & {
        data?: FileServiceFileStatsVO;
      }
    >(`/files/stats`);
  },
  /**
   * @description 上传单个文件
   */
  uploadCreate: (data: {
    /**
     * 文件
     * @format binary
     */
    file: File;
    /** 文件分类 */
    category?: string;
    /** 文件标签 */
    tags?: string;
  }) => {
    return httpClient.formData<
      ControllerResponse & {
        data?: FileServiceFileResponseVO;
      }
    >(`/files/upload`, { params: data });
  },
  /**
   * @description 根据文件ID获取文件详细信息
   */
  filesDetail: (id: number) => {
    return httpClient.get<
      ControllerResponse & {
        data?: FileServiceFileResponseVO;
      }
    >(`/files/${id}`);
  },
  /**
   * @description 根据文件ID删除文件
   */
  filesDelete: (id: number) => {
    return httpClient.delete<
      ControllerResponse & {
        message?: string;
      }
    >(`/files/${id}`);
  },
  /**
   * @description 根据文件ID下载文件
   */
  downloadDetail: (id: number) => {
    return httpClient.download<Blob>(`/files/${id}/download`);
  },
  /**
   * @description 根据文件ID重命名文件
   */
  renameUpdate: (id: number, new_name: string) => {
    return httpClient.put<
      ControllerResponse & {
        message?: string;
      }
    >(`/files/${id}/rename`, { params: new_name });
  }
};
