/**
 * @ProjectName: 智慧评标-主观分助手
 * @Package: com.zhpb.gdyd_zhpb_zgf.service
 * @ClassName: FileService
 * @Description: 文件服务接口，定义文件上传、ZIP解压、文件路径管理等功能
 * @Author: 张志锋
 * @Date: 2025-10-31
 * @Version: 1.0
 * @Copyright: © 2025 智慧评标-主观分助手
 */
package com.zhpb.gdyd_zhpb_zgf.service;

import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.nio.file.Path;
import java.util.List;

/**
 * 文件服务接口
 */
public interface FileService {

    /**
     * 上传ZIP文件并解压
     *
     * @param projectId 项目ID
     * @param zipFile ZIP文件
     * @return 上传结果，包含ZIP文件路径和解压后的文件路径列表
     * @throws IOException IO异常
     */
    UploadResult uploadAndExtractZip(String projectId, MultipartFile zipFile) throws IOException;
    
    /**
     * 上传结果
     */
    class UploadResult {
        private String zipFilePath;
        private String extractPath;
        private List<String> extractedFilePaths;
        
        public UploadResult(String zipFilePath, String extractPath, List<String> extractedFilePaths) {
            this.zipFilePath = zipFilePath;
            this.extractPath = extractPath;
            this.extractedFilePaths = extractedFilePaths;
        }
        
        public String getZipFilePath() { return zipFilePath; }
        public String getExtractPath() { return extractPath; }
        public List<String> getExtractedFilePaths() { return extractedFilePaths; }
    }

    /**
     * 创建或更新项目
     *
     * @param projectId 项目ID
     * @param projectName 项目名称（可选）
     * @return 项目对象
     */
    com.zhpb.gdyd_zhpb_zgf.entity.mysql.Project createOrUpdateProject(String projectId, String projectName);

    /**
     * 获取上传路径
     *
     * @param projectId 项目ID
     * @return 上传路径
     */
    Path getUploadPath(String projectId);

    /**
     * 获取解压路径
     *
     * @param projectId 项目ID
     * @return 解压路径
     */
    Path getExtractPath(String projectId);

    /**
     * 根据项目ID查询文件列表
     *
     * @param projectId 项目ID
     * @return 项目文件信息
     */
    com.zhpb.gdyd_zhpb_zgf.dto.ProjectFilesResponse.ProjectFilesData getProjectFiles(String projectId);

    /**
     * 异步处理采购文件下载和处理
     *
     * @param projectId 项目ID
     * @param packageId 包ID
     * @param fileUrls 文件URL列表
     * @param traceId 跟踪ID
     */
    void processProcurementFilesAsync(String projectId, String packageId, List<String> fileUrls, String traceId);

    /**
     * 异步处理应答文件下载和处理
     *
     * @param projectId 项目ID
     * @param packageId 包ID
     * @param supplierId 供应商ID
     * @param fileUrls 文件URL列表
     * @param fileType 文件类型
     * @param jsonFileId JSON文件ID
     * @param unitId 单位ID
     * @param traceId 跟踪ID
     */
    void processResponseFilesAsync(String projectId, String packageId, String supplierId,
                                 List<String> fileUrls, String fileType, String jsonFileId,
                                 String unitId, String traceId);
}

