package com.vetti.socket;

import cn.hutool.json.JSONUtil;

import javax.websocket.*;
import java.net.URI;
import java.nio.ByteBuffer;
import java.util.HashMap;
import java.util.Map;

// 客户端端点类
@ClientEndpoint
public class MyWebSocketClient {

    // 连接成功时触发
    @OnOpen
    public void onOpen(Session session) {
        System.out.println("连接已建立，Session ID: " + session.getId());

    }

    // 收到服务端消息时触发
    @OnMessage
    public void onMessage(String message, Session session) {
        System.out.println("收到服务端消息: " + message);
        Map map1 = JSONUtil.parseObj(message);
        Map data = (Map) map1.get("text_response_part");
        if(map1 != null  && "conversation_initiation_metadata".equals(map1.get("type").toString())){
            try {
                // 发送消息到服务端
                Map<String,String> map = new HashMap<>();
                map.put("type", "transcript");
                map.put("role", "user");
                map.put("text", "你好，只回复一句话");
                String s = JSONUtil.toJsonStr(map);
                session.getBasicRemote().sendText(s);

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        if(data != null  && "stop".equals(data.get("type").toString())&& "agent_chat_response_part".equals(map1.get("type").toString())){
            try {
                Thread.sleep(2000);
                // 发送消息到服务端
                Map<String,String> map = new HashMap<>();
                map.put("type", "transcript");
                map.put("role", "user");
                map.put("text", "你能回答我其他的嘛");
                String s = JSONUtil.toJsonStr(map);
                session.getBasicRemote().sendText(s);

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        // 可根据消息内容做后续处理
    }

//    @OnMessage
//    public void onBinary(ByteBuffer buffer) {
//        System.out.println("收到服务端语音流啦: " + buffer);
//    }
    // 连接关闭时触发
    @OnClose
    public void onClose(Session session, CloseReason reason) {
        System.out.println("连接关闭，原因: " + reason.getReasonPhrase());
    }

    // 发生错误时触发
    @OnError
    public void onError(Session session, Throwable error) {
        System.err.println("发生错误: ");
        error.printStackTrace();
    }

    public static void main(String[] args) {
        // WebSocket服务端地址（示例）
        String serverUri = "ws://vetti.hotake.cn/prod-api/voice-websocket/elevenLabsAgent/104";
        try {
            // 获取WebSocket容器c
            WebSocketContainer container = ContainerProvider.getWebSocketContainer();
            // 连接服务端（传入客户端端点实例和服务端URI）
            container.connectToServer(new MyWebSocketClient(), new URI(serverUri));
//            // 1. 设置文本消息缓冲区：256KB（测试足够用）
//            container.setDefaultMaxTextMessageBufferSize(2560 * 1024);
//            // 2. 设置二进制消息缓冲区（语音流用）
//            container.setDefaultMaxBinaryMessageBufferSize(2560 * 1024);
//            // 阻塞主线程，避免程序退出（实际场景根据需求处理）
            Thread.sleep(6000000);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
