package com.sonic.cow.client;

import com.sonic.cow.client.input.voicechat.domain.AgentConfig;
import com.sonic.cow.client.input.voicechat.domain.Audio;
import com.sonic.cow.client.input.voicechat.domain.UserPrompt;
import com.sonic.cow.client.rtc.callback.conversation.Conv;
import com.sonic.cow.client.rtc.callback.rts.Subv;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * 实时音视频 语音通话
 *
 * @author mzc
 */
public interface VoiceChatClient {

    /**
     * 生成RTC token
     * 文档：https://www.volcengine.com/docs/6348/70121
     *
     * @param roomId 房间id
     * @param userId 用户id
     * @return
     */
    String generateRtcToken(String roomId, String userId);

    /**
     * 启动智能体 在实时音视频场景中，你可以调用此接口在房间内引入一个智能体进行 AI 实时交互。
     * 文档：https://www.volcengine.com/docs/6348/1558163
     *
     * @param roomId
     * @param taskId
     * @param ttsAudio
     * @param systemPrompt
     * @param userPromptList
     * @param agentConfig
     */
    void startVoiceChat(String roomId, String taskId, Audio ttsAudio, String systemPrompt, List<UserPrompt> userPromptList, AgentConfig agentConfig);

    /**
     * 更新智能体 eg:打断 在实时音视频通话场景中，若你需要对智能体进行操作，比如在智能体进行语音输出时进行打断，可以通过调用此接口实现。
     *
     * @param roomId
     * @param taskId
     */
    void updateVoiceChat(String roomId, String taskId);

    /**
     * 停止智能体 在实时音视频通话场景中，若你需要结束智能体的语音聊天服务，可以通过调用此接口实现。
     *
     * @param roomId
     * @param taskId
     */
    void stopVoiceChat(String roomId, String taskId);

    /**
     * 服务端回调处理
     */
    void webhook(HttpServletRequest request, HttpServletResponse response);

    /**
     * 智能体会话状态回调处理
     *
     * @param request
     * @param response
     */
    Conv conversationStateCallback(HttpServletRequest request, HttpServletResponse response);

    /**
     * 智能话实时字幕回调处理
     *
     * @param request
     * @param response
     * @return
     */
    Subv rtsCallback(HttpServletRequest request, HttpServletResponse response);
}
