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.core.page.PageParam;
import org.xyzh.common.dto.ai.TbAiKnowledge;
import org.xyzh.common.vo.UserDeptRoleVO;

import java.util.List;

/**
 * @description 知识库数据访问层
 * @filename AiKnowledgeMapper.java
 * @author yslg
 * @copyright xyzh
 * @since 2025-10-15
 */
@Mapper
public interface AiKnowledgeMapper extends BaseMapper<TbAiKnowledge> {

    /**
     * 插入知识库
     */
    int insertKnowledge(TbAiKnowledge knowledge);

    /**
     * 更新知识库（动态更新非null字段）
     */
    int updateKnowledge(TbAiKnowledge knowledge);

    /**
     * 逻辑删除知识库
     */
    int deleteKnowledge(TbAiKnowledge knowledge);

    /**
     * 根据ID查询知识库（不带权限校验）
     */
    TbAiKnowledge selectKnowledgeById(@Param("knowledgeId") String knowledgeId);

    /**
     * 查询所有知识库（不带权限过滤，管理员使用）
     */
    List<TbAiKnowledge> selectAllKnowledges(@Param("filter") TbAiKnowledge filter);

    /**
     * 分页查询知识库（带权限过滤）
     */
    List<TbAiKnowledge> selectKnowledgesPage(
            @Param("filter") TbAiKnowledge filter,
            @Param("pageParam") PageParam pageParam,
            @Param("userDeptRoles") List<UserDeptRoleVO> userDeptRoles
    );

    /**
     * 统计知识库总数（带权限过滤）
     */
    long countKnowledges(
            @Param("filter") TbAiKnowledge filter,
            @Param("userDeptRoles") List<UserDeptRoleVO> userDeptRoles
    );

    /**
     * @description 查询知识库列表（带权限过滤）
     * @param filter 过滤条件
     * @param userDeptRoles 用户部门角色列表
     * @return List<TbAiKnowledge> 有权限访问的知识库列表
     * @author yslg
     * @since 2025-11-04
     */
    List<TbAiKnowledge> selectAiKnowledges(
            @Param("filter") TbAiKnowledge filter,
            @Param("userDeptRoles") List<UserDeptRoleVO> userDeptRoles
    );

    /**
     * @description 根据ID查询知识库（带权限检查）
     * @param knowledgeId 知识库ID
     * @param userDeptRoles 用户部门角色列表
     * @return TbAiKnowledge 知识库信息，无权限则返回null
     * @author yslg
     * @since 2025-11-04
     */
    TbAiKnowledge selectByIdWithPermission(
            @Param("knowledgeId") String knowledgeId,
            @Param("userDeptRoles") List<UserDeptRoleVO> userDeptRoles
    );

    /**
     * @description 检查用户对知识库的权限
     * @param knowledgeId 知识库ID
     * @param userDeptRoles 用户部门角色列表
     * @param permissionType 权限类型（read/write/execute）
     * @return Integer 权限数量（>0表示有权限）
     * @author yslg
     * @since 2025-11-04
     */
    Integer checkKnowledgePermission(
            @Param("knowledgeId") String knowledgeId,
            @Param("userDeptRoles") List<UserDeptRoleVO> userDeptRoles,
            @Param("permissionType") String permissionType
    );

    /**
     * @description 根据Dify数据集ID查询知识库
     * @param difyDatasetId Dify数据集ID
     * @return TbAiKnowledge 知识库信息
     * @author AI Assistant
     * @since 2025-11-04
     */
    TbAiKnowledge findByDifyDatasetId(@Param("difyDatasetId") String difyDatasetId);
}
