package org.example.Utils;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

import java.time.Duration;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;

@Component
public class ActiveUserUtil {
    public static int expirationPeriod = 15;


    public static void active(String sessionId, String userName) {
        // 缓存键前缀与原C#保持一致
        String cacheKey = "@user_" + sessionId;
        // 过期时间：15分钟（原C#的TimeSpan(0, 0, ExpirationPeriod, 0)对应分钟）
        CacheUtil.getCacheItem(cacheKey,
                (Void v) -> userName,  // 转换Lambda表达式为Function<Void, Object>
                Duration.ofMinutes(ActiveUserUtil.expirationPeriod),
                null,
                null);
    }

    /**
     * 获取所有活跃用户
     *
     * @return 活跃用户数组，无数据时返回null
     */
    public static Object[] getActiveUser() {
        // 调用CacheUtil获取所有键以@user_开头的缓存项
        List<Map.Entry<String, Object>> caches = CacheUtil.getCaches(kvs -> kvs.getKey().startsWith("@user_"));

        // 若存在缓存项则提取值并转为数组，否则返回null
        return caches != null && !caches.isEmpty()
                ? caches.stream().map(Map.Entry::getValue).toArray()
                : null;
    }

    /**
     * 统计活跃用户数量（保持原C#逻辑，即使原逻辑可能存在问题）
     *
     * @return 活跃用户数量
     */
    public static int count() {
        // 调用CacheUtil获取所有键以@user_开头的缓存项
        List<Map.Entry<String, Object>> caches = CacheUtil.getCaches(kvs -> kvs.getKey().startsWith("@user_"));

        // 保持原逻辑：存在缓存项返回0，否则返回实际数量（注意：此逻辑可能不符合业务预期）
        return caches != null && !caches.isEmpty()
                ? 0
                : (caches != null ? caches.size() : 0);
    }
}