package org.dromara.talk.service;

import org.dromara.talk.domain.dto.MessageStreamRequest;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;

import java.util.List;
import java.util.Map;

/**
 * 聊天服务接口
 */
public interface IChatService {

    /**
     * 流式处理用户消息
     *  userMessage 用户消息
     *  agentId 客服ID
     *  agentGender 客服性别
     *  ttsVcnList 发言人字典列表
     *  conversationId 对话ID
     *  isGreeting 是否为欢迎语
     *  requestId 请求ID（用于判断是否为最新请求）
     *  customerPhone 客户电话号码
     *  type 客户类型：2=ZoomPhone客户
     *  emitter SSE发射器
     */
    void processMessageStream(MessageStreamRequest request, SseEmitter emitter);

    /**
     * 开始对话会话
     *
     * @param agentId 客服ID
     * @param userId 用户ID
     * @param customerPhone 客户电话（可选）
     * @return 包含成功状态和sessionId的Map
     */
    Map<String, Object> startChatSession(Long agentId, Long userId, String customerPhone);

    /**
     * 挂断电话
     *
     * @param agentId 客服ID
     * @param sessionId 会话ID
     * @param chatHistory 对话历史记录
     * @return 是否成功
     */
    Boolean hangupCall(Long agentId, String sessionId, List<Map<String, Object>> chatHistory);
}
