import { api } from '@/api/index'
import { BatchFileUploadParam, FileUploadParam, ResultDomain, TbSysFileDTO } from '@/types';

export const fileAPI = {
    baseUrl: "/urban-lifeline/file",

    /**
     * 上传文件
     * @param param 文件上传参数
     * @returns Promise<ResultDomain<SysFile>>
     */
    async uploadFile(param: FileUploadParam): Promise<ResultDomain<TbSysFileDTO>> {
        const formData = new FormData();
        formData.append('file', param.file);
        if (param.module) {
            formData.append('module', param.module);
        }
        if (param.optsn) {
            formData.append('optsn', param.optsn);
        }
        if (param.uploader) {
            formData.append('uploader', param.uploader);
        }
        // 显式传递原始文件名，确保后端保存正确的文件名
        if (param.file.name) {
            formData.append('fileName', param.file.name);
        }
        const response = await api.upload<TbSysFileDTO>(`${this.baseUrl}/upload`, formData);
        return response.data;
    },

    /**
     * 批量上传文件
     * @param param 批量文件上传参数
     * @returns Promise<ResultDomain<SysFile>>
     */
    async batchUploadFiles(param: BatchFileUploadParam): Promise<ResultDomain<TbSysFileDTO>> {
        const formData = new FormData();
        param.files.forEach(file => {
            formData.append('files', file);
        });
        if (param.module) {
            formData.append('module', param.module);
        }
        if (param.optsn) {
            formData.append('optsn', param.optsn);
        }
        if (param.uploader) {
            formData.append('uploader', param.uploader);
        }
        const response = await api.upload<TbSysFileDTO>(`${this.baseUrl}/upload/batch`, formData);
        return response.data;
    },

    /**
     * 根据ID获取文件信息
     * @param fileId 文件ID
     * @returns Promise<ResultDomain<TbSysFileDTO>>
     */
    async getFileById(fileId: string): Promise<ResultDomain<TbSysFileDTO>> {
        const response = await api.get<TbSysFileDTO>(`${this.baseUrl}/${fileId}`);
        return response.data;
    },

    /**
     * 批量获取文件信息
     * @param fileIds 文件ID列表
     * @returns Promise<ResultDomain<TbSysFileDTO>>
     */
    async getFilesByIds(fileIds: string[]): Promise<ResultDomain<TbSysFileDTO>> {
        const response = await api.post<TbSysFileDTO>(`${this.baseUrl}/list`, { fileIds });
        return response.data;
    },

    /**
     * 下载文件
     * @param fileId 文件ID
     * @param filename 保存的文件名（可选）
     * @returns Promise<void>
     */
    async downloadFile(fileId: string, filename?: string): Promise<void> {
        return api.download(`${this.baseUrl}/download/${fileId}`, filename);
    },
}