package com.sonic.cow.client.input.voicechat;

import com.alibaba.fastjson.annotation.JSONField;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.google.common.collect.Lists;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import com.sonic.cow.client.input.voicechat.domain.*;
import org.apache.commons.lang3.StringUtils;

import java.util.List;

/**
 * 文档说明：https://www.volcengine.com/docs/6348/1558163
 *
 * @author mzc
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class StartVoiceChatInput {
    @ApiModelProperty("你的音视频应用的唯一标志，参看创建 RTC 应用获取或创建 AppId。")
    @JSONField(name = "AppId")
    private String AppId;
    @ApiModelProperty("智能体与真人进行通话的房间的 ID，需与真人用户使用客户端 SDK 进房时的使用的 RoomId 保持一致")
    @JSONField(name = "RoomId")
    private String RoomId;
    @ApiModelProperty("智能体任务 ID。由你自行定义，用于标识任务，且后续更新或结束此任务也需要使用该 TaskId。参数定义规则参看参数赋值规范。\n" +
            "一个 AppId 的 RoomId 下 TaskId 是唯一的，AppId + RoomId + TaskId 共同构成一个全局唯一的任务标识，用来标识指定 AppId 下某个房间内正在运行的任务，从而能在此任务运行中进行更新或者停止此任务。\n" +
            "不同 AppId 或者不同 RoomId 下 TaskId可以重复。")
    @JSONField(name = "TaskId")
    private String TaskId;
    @ApiModelProperty("智能体交互服务配置，包括语音识别（ASR）、语音合成（TTS）、大模型(LLM)、字幕和函数调用（Function Calling）配置。")
    @JSONField(name = "Config")
    private Config Config;
    @ApiModelProperty("智能体相关配置，包括欢迎词、任务状态回调等信息。")
    @JSONField(name = "AgentConfig")
    private AgentConfig AgentConfig;


    /**
     * 组装开始智能体服务请求对象
     *
     * @param rtcAppId
     * @param roomId
     * @param taskId
     * @return
     */
    public StartVoiceChatInput buildStartVoiceChatInput(String rtcAppId, Config config, String roomId, String taskId, AgentConfig agentConfig) {
        //入参
        StartVoiceChatInput startVoiceChatInput = StartVoiceChatInput.builder()
                .AppId(rtcAppId)
                .RoomId(roomId)
                .TaskId(taskId)
                .Config(config)
                .AgentConfig(agentConfig)
                .build();
        return startVoiceChatInput;
    }
}