package com.erp.file.service;

import com.erp.file.dto.*;
import com.erp.file.entity.FileEntity;
import org.springframework.web.multipart.MultipartFile;

import java.io.InputStream;
import java.util.List;
import java.util.Map;

/**
 * 文件服务接口
 */
public interface FileService {
    
    // ==================== 查询操作 ====================
    
    /**
     * 分页查询文件列表
     */
    PagedResponse<FileResponse> listFiles(FileQueryRequest request);
    
    /**
     * 获取文件详情
     */
    FileResponse getFileById(Long id);
    
    /**
     * 获取文件统计信息
     */
    FileStatisticsResponse getStatistics(Long userId);
    
    /**
     * 获取模块列表
     */
    List<String> getModules();
    
    // ==================== 上传操作 ====================
    
    /**
     * 上传单个文件
     */
    FileResponse uploadFile(MultipartFile file, String module, String purpose, String description, Long userId);
    
    /**
     * 批量上传文件
     */
    BatchUploadResponse batchUpload(MultipartFile[] files, String module, String purpose, Long userId);
    
    // ==================== 更新操作 ====================
    
    /**
     * 更新文件信息
     */
    FileResponse updateFile(Long id, FileUpdateRequest request);
    
    // ==================== 删除操作 ====================
    
    /**
     * 删除文件
     */
    void deleteFile(Long id);
    
    /**
     * 批量删除文件
     */
    Map<String, Object> batchDelete(List<Long> fileIds);
    
    /**
     * 清理过期文件
     */
    Map<String, Object> cleanupExpired(Integer days);
    
    // ==================== 下载预览 ====================
    
    /**
     * 下载文件
     */
    InputStream downloadFile(Long id);
    
    /**
     * 预览文件
     */
    InputStream previewFile(Long id);
    
    /**
     * 获取文件信息用于下载
     */
    FileEntity getFileEntityForDownload(Long id);
    
    // ==================== 配置 ====================
    
    /**
     * 获取上传配置
     */
    UploadConfigResponse getUploadConfig();
}
