package org.dromara.knowledge.service;

import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * 知识库文档处理Service接口
 *
 * @author pengles
 */
public interface KnowledgeDocumentService {

    /**
     * 处理上传的文档
     *
     * @param knowledgeId 知识库ID
     * @param file        上传的文件
     * @return 文档ID
     */
    String processUploadedDocument(String knowledgeId, MultipartFile file);

    /**
     * 将文档内容分割成知识片段
     *
     * @param knowledgeId 知识库ID
     * @param docId       文档ID
     * @param content     文档内容
     * @param chunkSize   分片大小
     * @param overlapSize 重叠大小
     * @return 知识片段ID列表
     */
    List<String> splitDocumentIntoFragments(String knowledgeId, String docId, String content,
                                            Integer chunkSize, Integer overlapSize);

    /**
     * 提取文档文本内容
     *
     * @param file 文件
     * @return 文本内容
     */
    String extractTextContent(MultipartFile file);

    /**
     * 清理和预处理文本内容
     *
     * @param content 原始内容
     * @return 清理后的内容
     */
    String cleanTextContent(String content);

    /**
     * 验证文件类型是否支持
     *
     * @param file 文件
     * @return 是否支持
     */
    boolean isSupportedFileType(MultipartFile file);

    /**
     * 获取支持的文件类型列表
     *
     * @return 支持的文件类型列表
     */
    List<String> getSupportedFileTypes();

    /**
     * 获取知识库处理状态
     *
     * @param knowledgeId   知识库ID
     * @param knowledgeInfo 知识库信息
     * @return 知识库状态信息
     */
    org.dromara.knowledge.domain.vo.KnowledgeStatusVo getKnowledgeProcessingStatus(Long knowledgeId, org.dromara.knowledge.domain.vo.KnowledgeInfoVo knowledgeInfo);

    /**
     * 处理文档内容并生成知识片段
     *
     * @param knowledgeId   知识库ID
     * @param docId         文档ID
     * @param content       文档内容
     * @param knowledgeInfo 知识库信息
     * @return 处理任务ID
     */
    String processDocumentContent(String knowledgeId, String docId, String content, org.dromara.knowledge.domain.KnowledgeInfo knowledgeInfo);

    /**
     * 对知识片段进行向量化
     *
     * @param knowledgeId   知识库ID
     * @param fragmentId    知识片段ID
     * @param knowledgeInfo 知识库信息
     * @return 向量化任务ID
     */
    String vectorizeKnowledgeFragment(String knowledgeId, String fragmentId, org.dromara.knowledge.domain.KnowledgeInfo knowledgeInfo);

}