package org.xyzh.api.ai.knowledge;

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

import java.util.List;

/**
 * @description AI知识库服务接口
 * @filename AiKnowledgeService.java
 * @author yslg
 * @copyright xyzh
 * @since 2025-10-15
 */
public interface AiKnowledgeService {

    /**
     * @description 获取知识库列表
     * @param filter 过滤条件
     * @return ResultDomain<TbAiKnowledge> 知识库列表
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbAiKnowledge> getKnowledgeList(TbAiKnowledge filter);

    /**
     * @description 根据ID获取知识详情
     * @param knowledgeID 知识ID
     * @return ResultDomain<TbAiKnowledge> 知识详情
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbAiKnowledge> getKnowledgeById(String knowledgeID);

    /**
     * @description 创建知识
     * @param knowledge 知识信息
     * @return ResultDomain<TbAiKnowledge> 创建结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbAiKnowledge> createKnowledge(TbAiKnowledge knowledge);

    /**
     * @description 更新知识
     * @param knowledge 知识信息
     * @return ResultDomain<TbAiKnowledge> 更新结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbAiKnowledge> updateKnowledge(TbAiKnowledge knowledge);

    /**
     * @description 删除知识
     * @param knowledgeID 知识ID
     * @return ResultDomain<Boolean> 删除结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<Boolean> deleteKnowledge(String knowledgeID);

    /**
     * @description 更新知识状态
     * @param knowledgeID 知识ID
     * @param status 状态
     * @return ResultDomain<TbAiKnowledge> 更新结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbAiKnowledge> updateKnowledgeStatus(String knowledgeID, Integer status);

    /**
     * @description 更新知识向量ID
     * @param knowledgeID 知识ID
     * @param vectorID 向量ID
     * @return ResultDomain<TbAiKnowledge> 更新结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbAiKnowledge> updateKnowledgeVector(String knowledgeID, String vectorID);

    /**
     * @description 搜索知识
     * @param keyword 关键词
     * @param category 分类（可选）
     * @param status 状态（可选）
     * @return ResultDomain<TbAiKnowledge> 搜索结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbAiKnowledge> searchKnowledge(String keyword, String category, Integer status);

    /**
     * @description 根据分类获取知识
     * @param category 分类
     * @return ResultDomain<TbAiKnowledge> 知识列表
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbAiKnowledge> getKnowledgeByCategory(String category);

    /**
     * @description 根据标签获取知识
     * @param tag 标签
     * @return ResultDomain<TbAiKnowledge> 知识列表
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbAiKnowledge> getKnowledgeByTag(String tag);

    /**
     * @description 向量检索知识
     * @param query 查询内容
     * @param limit 限制数量
     * @return ResultDomain<TbAiKnowledge> 检索结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbAiKnowledge> vectorSearchKnowledge(String query, Integer limit);

    /**
     * @description 批量删除知识
     * @param knowledgeIDs 知识ID列表
     * @return ResultDomain<Boolean> 删除结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<Boolean> batchDeleteKnowledge(List<String> knowledgeIDs);

    /**
     * @description 获取知识统计
     * @param category 分类（可选）
     * @return ResultDomain<TbAiKnowledge> 知识统计
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbAiKnowledge> getKnowledgeStatistics(String category);
}
