package org.xyzh.api.ai.service;

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

import org.springframework.web.multipart.MultipartFile;
import org.xyzh.common.core.domain.ResultDomain;

/**
 * @description    AI文件上传服务（只负责与Dify交互，不处理minio和数据库）
 * @author    yslg
 * @since 2025-12-18
 */
public interface AIFileUploadService {

    // ============================ 对话文件管理 ============================
    
    /**
     * @description    上传文件用于对话（图文多模态）
     * @param    file 上传的文件
     * @param    agentId 智能体ID
     * @return    ResultDomain<Map<String, Object>> Dify文件信息
     * @author    yslg
     * @since 2025-12-18
     */
    ResultDomain<Map<String, Object>> uploadFileForChat(MultipartFile file, String agentId);

    // ============================ 知识库Dify文档管理 ============================

    /**
     * @description    上传文件到Dify知识库（只负责Dify上传，不处理minio和数据库）
     * @param    difyDatasetId Dify知识库ID
     * @param    file 文件
     * @param    fileName 文件名
     * @param    indexingTechnique 索引方式
     * @return    ResultDomain<String> Dify文档ID
     * @author    yslg
     * @since 2025-12-18
     */
    ResultDomain<String> uploadFileToDify(String difyDatasetId, File file, String fileName, String indexingTechnique);

    /**
     * @description    从Dify知识库删除文档
     * @param    difyDatasetId Dify知识库ID
     * @param    difyDocumentId Dify文档ID
     * @return    ResultDomain<Boolean> 删除结果
     * @author    yslg
     * @since 2025-12-18
     */
    ResultDomain<Boolean> deleteFileFromDify(String difyDatasetId, String difyDocumentId);

    /**
     * @description    批量从Dify知识库删除文档
     * @param    difyDatasetId Dify知识库ID
     * @param    difyDocumentIds Dify文档ID列表
     * @return    ResultDomain<Boolean> 删除结果
     * @author    yslg
     * @since 2025-12-18
     */
    ResultDomain<Boolean> batchDeleteFilesFromDify(String difyDatasetId, List<String> difyDocumentIds);
}
