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

import com.alibaba.fastjson.annotation.JSONField;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 文档：https://www.volcengine.com/docs/6348/1558163
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class ASRConfig {
    @ApiModelProperty("语音识别服务的提供商。该参数固定取值：volcano，表示仅支持火山引擎语音识别服务。可使用以下模型：\n" +
            "火山引擎流式语音识别（识别速度更快）\n" +
            "火山引擎流式语音识别大模型（识别准确率更高）\n" +
            "两者详细差异（如可识别语种、支持的能力等），请参见流式语音识别和流式语音识别大模型。")
    @JSONField(name="Provider")
    private String Provider;

    @ApiModelProperty("服务配置参数。\n" +
            "不同服务，该结构包含字段不同，具体参看：\n" +
            "火山引擎流式语音识别\n" +
            "火山引擎流式语音识别大模型")
    @JSONField(name="ProviderParams")
    private ASRProviderParams ProviderParams;

    @ApiModelProperty("Trigger method for a new round of conversation.\n" +
            "0: After the server detects a complete sentence, it automatically triggers a new round of conversation.\n" +
            "1: After receiving the input end signal or the speech caption result, you decide whether to trigger a new round of conversation by yourself.\n" +
            "The default value is 0")
    @JSONField(name="TurnDetectionMode")
    private Integer TurnDetectionMode;


    /**
     * 获取ASR配置
     *
     * @param asrAppId
     * @param asrAccessToken
     * @return
     */
    public static ASRConfig getAsrConfig(String asrAppId, String asrAccessToken,String asrProvider) {
        return ASRConfig.builder()
                .Provider(asrProvider)
                .ProviderParams(getAsrProviderParams(asrAppId, asrAccessToken))
                .TurnDetectionMode(0)
                .build();
    }
    /**
     * 获取ASR参数
     *
     * @param asrAppId
     * @param asrAccessToken
     * @return
     */
    public static ASRProviderParams getAsrProviderParams(String asrAppId, String asrAccessToken) {
        return ASRProviderParams.builder()
                //模型类型。该参数固定取值：SeedASR，表示火山引擎语音识别大模型
                .Mode("SeedASR")
                .Language("en-US")
                //开通火山引擎流式语音识别大模型服务后获取的 App ID，用于标识应用。你可登录豆包语音控制台获取。
                .AppId(asrAppId)
                //与开通流式语音识别大模型服务 App ID 对应的 AccessToken，用于身份认证。你可登录豆包语音控制台获取。
                .AccessToken(asrAccessToken)
                //火山引擎流式语音识别大模型服务开通类型：volc.bigasr.sauc.duration：小时版。volc.bigasr.sauc.concurrent：并发版。
                .StreamMode(0)
//                .ApiResourceId("volc.bigasr.sauc.duration")
                .build();
    }
}