package org.xyzh.ai.mapper;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.xyzh.api.ai.dto.TbKnowledgeFile;
import org.xyzh.api.ai.vo.KnowledgeFileVO;
import org.xyzh.common.core.page.PageParam;

import java.util.List;

/**
 * @description 知识库文件数据访问层
 * @filename KnowledgeFileMapper.java
 * @author yslg
 * @copyright xyzh
 * @since 2025-12-17
 */
@Mapper
public interface TbKnowledgeFileMapper {

    /**
     * 插入知识库文件
     */
    int insertKnowledgeFile(TbKnowledgeFile file);

    /**
     * 更新知识库文件
     */
    int updateKnowledgeFile(TbKnowledgeFile file);

    /**
     * 逻辑删除知识库文件
     */
    int deleteKnowledgeFile(TbKnowledgeFile file);

    /**
     * 根据知识库ID和文件ID查询
     */
    TbKnowledgeFile selectKnowledgeFile(
            @Param("knowledgeId") String knowledgeId,
            @Param("fileId") String fileId
    );

    /**
     * 根据知识库ID查询文件列表（关联文件详细信息）
     */
    List<KnowledgeFileVO> selectFilesByKnowledgeId(@Param("knowledgeId") String knowledgeId);

    /**
     * 根据文件根ID查询所有版本
     */
    List<TbKnowledgeFile> selectFileVersions(@Param("fileRootId") String fileRootId);

    /**
     * 分页查询知识库文件（关联文件详细信息）
     */
    List<KnowledgeFileVO> selectFilePage(
            @Param("knowledgeId") String knowledgeId,
            @Param("pageParam") PageParam pageParam
    );

    /**
     * 统计知识库文件数量
     */
    long countFiles(@Param("knowledgeId") String knowledgeId);

    /**
     * 批量删除知识库文件（根据文件根ID）
     */
    int deleteFilesByRootId(@Param("fileRootId") String fileRootId);

    /**
     * 获取文件最新版本号
     */
    Integer selectLatestVersion(
            @Param("knowledgeId") String knowledgeId,
            @Param("fileRootId") String fileRootId
    );

    /**
     * 根据文件根ID查询最大版本的文件
     */
    TbKnowledgeFile selectLatestVersionFile(@Param("fileRootId") String fileRootId);

    /**
     * 根据文件根ID查询所有版本（包含文件详细信息）
     */
    List<KnowledgeFileVO> selectFileVersionsWithDetail(@Param("fileRootId") String fileRootId);
}
