package org.xyzh.ai.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.xyzh.common.dto.ai.TbAiUploadFile;

import java.util.List;

/**
 * @description 上传文件数据访问层
 * @filename AiUploadFileMapper.java
 * @author yslg
 * @copyright xyzh
 * @since 2025-10-15
 */
@Mapper
public interface AiUploadFileMapper extends BaseMapper<TbAiUploadFile> {

    /**
     * 插入文件记录
     */
    int insertUploadFile(TbAiUploadFile file);

    /**
     * 更新文件记录（动态更新非null字段）
     */
    int updateUploadFile(TbAiUploadFile file);

    /**
     * 逻辑删除文件记录
     */
    int deleteUploadFile(TbAiUploadFile file);

    /**
     * 根据ID查询文件
     */
    TbAiUploadFile selectUploadFileById(@Param("fileId") String fileId);

    /**
     * 查询所有文件（支持过滤）
     */
    List<TbAiUploadFile> selectAllUploadFiles(@Param("filter") TbAiUploadFile filter);

    /**
     * 根据知识库ID查询文件列表
     */
    List<TbAiUploadFile> selectFilesByKnowledgeId(@Param("knowledgeId") String knowledgeId);

    /**
     * 分页查询文件
     */
    List<TbAiUploadFile> selectUploadFilesPage(
            @Param("filter") TbAiUploadFile filter,
            @Param("pageParam") org.xyzh.common.core.page.PageParam pageParam
    );

    /**
     * 统计文件总数
     */
    long countUploadFiles(@Param("filter") TbAiUploadFile filter);

    /**
     * @description 查询上传文件列表
     * @param filter 过滤条件
     * @return List<TbAiUploadFile> 上传文件列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbAiUploadFile> selectAiUploadFiles(TbAiUploadFile filter);
    
    /**
     * 根据消息ID查询关联的文件列表
     * @param messageId 消息ID
     * @return List<TbAiUploadFile> 文件列表
     */
    List<TbAiUploadFile> selectFilesByMessageId(@Param("messageId") String messageId);
    
    /**
     * 批量插入文件记录
     * @param files 文件列表
     * @return 插入行数
     */
    int batchInsertUploadFiles(@Param("files") List<TbAiUploadFile> files);
    
    /**
     * 根据Dify文档ID查询文件
     * @param difyDocumentId Dify文档ID
     * @return TbAiUploadFile 文件记录
     */
    TbAiUploadFile selectFileByDifyDocumentId(@Param("difyDocumentId") String difyDocumentId);

    /**
     * 同步分段
     * @param difyDocumentId Dify文档ID
     * @param action 操作类型: 1-创建, -1-删除
     * @return 影响行数
     */
    int chunkSync(@Param("difyDocumentId") String difyDocumentId, @Param("action") int action);
}
