package com.unicorn.hgzero.stt.config;

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 설정
 * 실시간 음성 스트리밍을 위한 WebSocket 엔드포인트 설정
 */
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
    
    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        // 실시간 STT WebSocket 엔드포인트 등록
        registry.addHandler(new SttWebSocketHandler(), "/ws/stt/{sessionId}")
                .setAllowedOrigins("*"); // 실제 운영 환경에서는 특정 도메인으로 제한
    }
    
    /**
     * STT WebSocket 핸들러
     * 실시간 음성 데이터 수신 및 처리
     */
    private static class SttWebSocketHandler implements org.springframework.web.socket.WebSocketHandler {
        
        @Override
        public void afterConnectionEstablished(org.springframework.web.socket.WebSocketSession session) throws Exception {
            System.out.println("STT WebSocket 연결 설정: " + session.getId());
            // 실제로는 Azure Speech Service 스트리밍 연결 설정
        }
        
        @Override
        public void handleMessage(org.springframework.web.socket.WebSocketSession session, 
                                org.springframework.web.socket.WebSocketMessage<?> message) throws Exception {
            // 실시간 음성 데이터 처리
            System.out.println("음성 데이터 수신: " + message.getPayload());
            // 실제로는 TranscriptionService.processAudioStream() 호출
        }
        
        @Override
        public void handleTransportError(org.springframework.web.socket.WebSocketSession session, 
                                       Throwable exception) throws Exception {
            System.err.println("WebSocket 전송 오류: " + exception.getMessage());
        }
        
        @Override
        public void afterConnectionClosed(org.springframework.web.socket.WebSocketSession session, 
                                        org.springframework.web.socket.CloseStatus closeStatus) throws Exception {
            System.out.println("STT WebSocket 연결 종료: " + session.getId());
            // 리소스 정리
        }
        
        @Override
        public boolean supportsPartialMessages() {
            return false;
        }
    }
}