package com.test.musichouduan.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        // 配置消息代理，用于广播式消息（例如，/topic/ 前缀）
        // 客户端订阅 "/topic/comments/{targetType}/{targetId}" 来接收特定目标的评论更新
        config.enableSimpleBroker("/topic");
        // 配置应用程序目标前缀，客户端发送消息到服务器的目标前缀（例如，/app/ 前缀）
        // 这个项目我们主要用服务器主动推送，所以 /app 可能用不到，但先配置上
        config.setApplicationDestinationPrefixes("/app");
    }

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        // 注册一个 STOMP 端点，客户端将使用它连接到 WebSocket 服务器
        // "/ws" 是连接的端点路径
        // withSockJS() 启用 SockJS 后备选项，以便在 WebSocket 不可用时使用其他传输方式
        // setAllowedOrigins("*") 允许所有来源的跨域连接，在生产环境中应配置为具体的来源
        registry.addEndpoint("/ws")
                .setAllowedOrigins("http://localhost:5173", "http://localhost:5174", "https://your-production-domain.com")
                .withSockJS(); // 启用 SockJS 支持
    }
}
