package com.aegis.file.service;

import com.aegis.file.domain.FileInfo;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.multipart.MultipartFile;

/**
 * 统一文件服务接口
 * 
 * @author aegis
 */
public interface IFileService {
    
    /**
     * 上传文件（单个）
     * 
     * @param file 文件对象
     * @return 文件信息对象
     */
    FileInfo uploadFile(MultipartFile file);
    
    /**
     * 根据ID查询文件信息
     * 
     * @param fileId 文件ID
     * @return 文件信息对象
     */
    FileInfo selectFileById(Long fileId);
    
    /**
     * 根据ID列表批量查询文件信息
     * 
     * @param fileIds 文件ID列表
     * @return 文件列表
     */
    List<FileInfo> selectFilesByIds(Long[] fileIds);
    
    /**
     * 查询文件列表（支持筛选）
     * 
     * @param fileInfo 查询条件（支持按上传者、文件分类、状态等筛选）
     * @return 文件列表
     */
    List<FileInfo> selectFileList(FileInfo fileInfo);
    
    /**
     * 下载文件（根据文件ID）
     * 
     * @param fileId 文件ID
     * @param response HTTP响应对象
     */
    void downloadFile(Long fileId, HttpServletResponse response);
    
    /**
     * 删除文件（逻辑删除，自动从SecurityContext获取userId进行权限校验）
     * 
     * @param fileId 文件ID
     * @return 结果
     */
    int deleteFile(Long fileId);
}