package com.zksy.web.websocket;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.listener.ChannelTopic;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;

/**
 * Redis Pub/Sub 配置
 * <p>
 * 配置 Redis 消息监听容器，订阅设备状态变更频道。
 * 当 zk-api-service 更新设备报警状态后，通过 Redis 频道通知本服务推送到 WebSocket 客户端。
 *
 * @author zksy
 */
@Configuration
public class RedisPubSubConfig {

    @Autowired
    private DeviceStatusRedisListener deviceStatusRedisListener;

    /**
     * Redis 消息监听容器
     * <p>
     * 订阅 {@code device:status:change} 频道，收到消息后由
     * {@link DeviceStatusRedisListener} 处理推送。
     */
    @Bean
    public RedisMessageListenerContainer redisMessageListenerContainer(
            RedisConnectionFactory connectionFactory) {
        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);

        // 直接注册 MessageListener 实现，无需适配器
        container.addMessageListener(deviceStatusRedisListener,
                new ChannelTopic(DeviceStatusRedisListener.CHANNEL));

        return container;
    }
}