package com.ttstd.signaling.store;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;

import java.util.concurrent.TimeUnit;

/**
 * 基于 Redis 的 nonce 去重实现（多实例共享，推荐生产使用）。
 *
 * <p>通过 {@code SET key value NX EX ttl} 原子操作保证并发安全；Redis 不可用时
 * 调用方应降级到 {@link InMemoryNonceStore}（由配置选择），本类不内嵌降级逻辑。
 */
@Component
@org.springframework.context.annotation.Profile("!memory")
public class RedisNonceStore implements NonceStore {

    private static final Logger logger = LoggerFactory.getLogger(RedisNonceStore.class);
    private final StringRedisTemplate redis;

    public RedisNonceStore(StringRedisTemplate redis) {
        this.redis = redis;
    }

    @Override
    public boolean tryReserve(String nonce, long ttlSeconds) {
        String key = "webrtc:nonce:" + nonce;
        Boolean ok = redis.opsForValue().setIfAbsent(key, "1", ttlSeconds, TimeUnit.SECONDS);
        return Boolean.TRUE.equals(ok);
    }
}
