package org.xyzh.api.ai.file;

import org.xyzh.common.core.domain.ResultDomain;
import org.xyzh.common.dto.ai.TbAiUploadFile;

import java.util.List;

/**
 * @description AI文件上传服务接口
 * @filename AiUploadFileService.java
 * @author yslg
 * @copyright xyzh
 * @since 2025-10-15
 */
public interface AiUploadFileService {

    /**
     * @description 获取用户上传文件列表
     * @param userID 用户ID
     * @param conversationID 会话ID（可选）
     * @param status 状态（可选）
     * @return ResultDomain<TbAiUploadFile> 文件列表
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbAiUploadFile> getUserFiles(String userID, String conversationID, Integer status);

    /**
     * @description 根据ID获取文件详情
     * @param fileID 文件ID
     * @return ResultDomain<TbAiUploadFile> 文件详情
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbAiUploadFile> getFileById(String fileID);

    /**
     * @description 创建文件记录
     * @param file 文件信息
     * @return ResultDomain<TbAiUploadFile> 创建结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbAiUploadFile> createFile(TbAiUploadFile file);

    /**
     * @description 更新文件状态
     * @param fileID 文件ID
     * @param status 状态
     * @return ResultDomain<TbAiUploadFile> 更新结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbAiUploadFile> updateFileStatus(String fileID, Integer status);

    /**
     * @description 更新文件提取文本
     * @param fileID 文件ID
     * @param extractedText 提取的文本
     * @return ResultDomain<TbAiUploadFile> 更新结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbAiUploadFile> updateFileExtractedText(String fileID, String extractedText);

    /**
     * @description 删除文件
     * @param fileID 文件ID
     * @return ResultDomain<Boolean> 删除结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<Boolean> deleteFile(String fileID);

    /**
     * @description 清空会话文件
     * @param conversationID 会话ID
     * @return ResultDomain<Boolean> 清空结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<Boolean> clearConversationFiles(String conversationID);

    /**
     * @description 清空用户文件
     * @param userID 用户ID
     * @return ResultDomain<Boolean> 清空结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<Boolean> clearUserFiles(String userID);

    /**
     * @description 获取文件统计
     * @param userID 用户ID
     * @param conversationID 会话ID（可选）
     * @return ResultDomain<TbAiUploadFile> 文件统计
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbAiUploadFile> getFileStatistics(String userID, String conversationID);

    /**
     * @description 根据文件名搜索文件
     * @param userID 用户ID
     * @param fileName 文件名
     * @return ResultDomain<TbAiUploadFile> 搜索结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbAiUploadFile> searchFilesByName(String userID, String fileName);

    /**
     * @description 根据文件类型获取文件
     * @param userID 用户ID
     * @param fileType 文件类型
     * @return ResultDomain<TbAiUploadFile> 文件列表
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbAiUploadFile> getFilesByType(String userID, String fileType);

    /**
     * @description 批量删除文件
     * @param fileIDs 文件ID列表
     * @return ResultDomain<Boolean> 删除结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<Boolean> batchDeleteFiles(List<String> fileIDs);

    /**
     * @description 检查文件是否存在
     * @param userID 用户ID
     * @param fileName 文件名
     * @param filePath 文件路径
     * @return ResultDomain<Boolean> 是否存在
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<Boolean> checkFileExists(String userID, String fileName, String filePath);
}
