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;

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class TTSConfig {

//    @ApiModelProperty("过滤大模型返回内容中指定标点符号中的文字后再进行语音合成。你需要在大模型 Prompt 中自行定义哪些内容放在指定标点符号内。具体使用方法参看过滤指定内容。\n" +
//            "支持取值及含义如下：\n" +
//            "1：中文括号（）\n" +
//            "2：英文括号()\n" +
//            "3：中文方括号【】\n" +
//            "4：英文方括号[]\n" +
//            "5：英文花括号{}\n" +
//            "默认值为空，表示不进行过滤。")
//    private String IgnoreBracketText;

    @ApiModelProperty("语音合成服务提供商，使用不同语音合成服务时，取值不同。支持使用的语音合成服务及对应取值如下：\n" +
            "volcano（服务自上而下语音生成速度递减，情感表现力递增）\n" +
            "火山引擎语音合成\n" +
            "火山引擎语音合成大模型（非流式输入流式输出）\n" +
            "火山引擎声音复刻大模型（非流式输入流式输出）\n" +
            "volcano_bidirection（服务自上而下语音生成速度递减，情感表现力递增）\n" +
            "火山引擎语音合成大模型（流式输入流式输出）\n" +
            "火山引擎声音复刻大模型（流式输入流式输出）\n" +
            "minimax：MiniMax 语音合成\n" +
            "ai_gateway：自部署语音合成模型（通过火山边缘大模型网关接入的）")
    @JSONField(name="Provider")
    private String Provider;

    @ApiModelProperty("配置所选的语音合成服务。不同服务下，该结构包含字段不同：\n" +
            "火山引擎语音合成\n" +
            "火山引擎语音合成大模型（非流式输入流式输出）\n" +
            "火山引擎语音合成大模型（流式输入流式输出）\n" +
            "火山引擎声音复刻大模型（非流式输入流式输出）\n" +
            "火山引擎声音复刻大模型（流式输入流式输出）\n" +
            "MiniMax 语音合成\n" +
            "自部署语音合成")
    @JSONField(name="ProviderParams")
    private TTSProviderParams ProviderParams;


    /**
     * 获取TTS配置
     *
     * @param ttsAppId
     * @param ttsToken
     * @param audio
     * @param ttsProvider
     * @return
     */
    public static TTSConfig getTTSConfig(String ttsAppId, String ttsToken, Audio audio, String ttsProvider) {
        TTSProviderParams ttsProviderParams = TTSProviderParams.builder()
                .app(getTTSApp(ttsAppId, ttsToken))
                .audio(audio)
                //TODO 临时使用
                .ResourceId("volc.megatts.default")
//                .ResourceId("volc.service_type.1000009")
                .build();
        return TTSConfig.builder()
                //语音合成服务提供商，使用不同语音合成服务时，取值不同 待确定
                .Provider(ttsProvider)
                .ProviderParams(ttsProviderParams)
                .build();
    }


    /**
     * 获取TTS app
     *
     * @param ttsAppId
     * @param ttsToken
     * @return
     */
    public static App getTTSApp(String ttsAppId, String ttsToken) {
        return App.builder()
                //开通火山引擎语音合成大模型服务后获取的 App ID，用于标识应用。你可登录豆包语音控制台获取
                .appid(ttsAppId)
                //与语音合成大模型服务 App ID 对应的 AccessToken，用于身份认证。你可登录豆包语音控制台获取。Access Token 查找方式，可参看如何获取 Token。
                .token(ttsToken)
                .build();
    }
}