package com.saas.voip.config;

import com.saas.voip.handler.TwilioMediaStreamHandler;
import com.saas.voip.handler.GeminiSessionHandler;
import com.saas.voip.controller.GeminiConversationRelayController;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;

/**
 * WebSocket Configuration
 * 
 * Registers WebSocket handlers for real-time voice integrations:
 * - Twilio Media Streams: /media-stream (OpenAI, ElevenLabs)
 * - Gemini Live API: /api/voip/gemini/stream (DEPRECATED - audio noise issues)
 * - Gemini ConversationRelay: /api/voip/gemini/conversation (NEW! Text-based, reliable)
 */
@Configuration
@EnableWebSocket
@RequiredArgsConstructor
@Slf4j
public class WebSocketConfig implements WebSocketConfigurer {

    private final TwilioMediaStreamHandler twilioMediaStreamHandler;
    private final GeminiSessionHandler geminiSessionHandler;
    private final GeminiConversationRelayController geminiConversationRelayController;

    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        log.info("Registering WebSocket handler at /media-stream");
        registry.addHandler(twilioMediaStreamHandler, "/media-stream")
                .setAllowedOrigins("*")
                .setAllowedOriginPatterns("*");
        
        // Gemini Live API endpoint (DEPRECATED - audio noise issues)
        log.info("Registering WebSocket handler at /api/voip/gemini/stream");
        registry.addHandler(geminiSessionHandler, "/api/voip/gemini/stream")
                .setAllowedOrigins("*")
                .setAllowedOriginPatterns("*");
        
        // Gemini ConversationRelay endpoint (NEW! Text-based, reliable)
        log.info("Registering WebSocket handler at /api/voip/gemini/conversation");
        registry.addHandler(geminiConversationRelayController, "/api/voip/gemini/conversation")
                .setAllowedOrigins("*")
                .setAllowedOriginPatterns("*");
    }
}
