package com.ruoyi.llm.service;

import com.alibaba.fastjson2.JSONObject;
import com.ruoyi.llm.domain.CmcAgent;

import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * 智能体Service接口
 *
 * @author ruoyi
 * @date 2025-07-17
 */
public interface ICmcAgentService
{
    /**
     * 查询智能体
     *
     * @param agentId 智能体主键
     * @return 智能体
     */
    public CmcAgent selectCmcAgentByAgentId(Integer agentId);

    /**
     * 查询智能体列表
     *
     * @param cmcAgent 智能体
     * @return 智能体集合
     */
    public List<CmcAgent> selectCmcAgentList(CmcAgent cmcAgent);

    /**
     * 获取开场白
     *
     * @param agentName 智能体名称
     * @return 结果
     */
    public String getOpening(String agentName);

    /**
     * 上传单文件
     *
     * @param file 文件
     * @return 结果
     */
    public JSONObject uploadDocument(MultipartFile file, String agentName) throws Throwable;

    /**
     * 上传修改文件
     *
     * @param topicId 话题ID
     * @param file 文件
     * @param agentName 智能体名称
     * @param selectedNode 选中的节点标题（可选，为空时生成全部章节）
     * @return 结果
     */
    public JSONObject uploadModifyFile(String topicId, MultipartFile file, String agentName, String selectedNode) throws Throwable;

    /**
     * 上传多文件
     *
     * @param fileList 文件
     * @return 结果
     */
    public String uploadDocumentList(MultipartFile[] fileList, String agentName) throws Throwable;

    /**
     * 获取进度
     *
     * @return 结果
     */
    public String getProcess();

    /**
     * 新增智能体
     *
     * @param cmcAgent 智能体
     * @return 结果
     */
    public int insertCmcAgent(CmcAgent cmcAgent);

    /**
     * 修改智能体
     *
     * @param cmcAgent 智能体
     * @return 结果
     */
    public int updateCmcAgent(CmcAgent cmcAgent);

    /**
     * 批量删除智能体
     *
     * @param agentIds 需要删除的智能体主键集合
     * @return 结果
     */
    public int deleteCmcAgentByAgentIds(Integer[] agentIds);

    /**
     * 删除智能体信息
     *
     * @param agentId 智能体主键
     * @return 结果
     */
    public int deleteCmcAgentByAgentId(Integer agentId);

    /**
     * 保存目录到Word文件
     *
     * @param data 目录数据
     * @return 结果
     */
    public JSONObject writeTitles(JSONObject data) throws Throwable;

    /**
     * 流式生成章节内容（SSE方式）
     *
     * @param topicId 主题ID
     * @param file 招标文件
     * @param agentName 智能体名称
     * @param selectedNode 选中的节点标题（可选，为空时生成全部章节）
     * @return SseEmitter
     */
    public SseEmitter streamGenerateChapters(String topicId, MultipartFile file, String agentName, String selectedNode) throws Throwable;

}
