package com.multictrl.common.utils;

import cn.hutool.cache.impl.TimedCache;

/**
 * 缓存工具类
 * 支持为每个缓存项单独设置过期时间，过期后自动删除
 *
 * @author Sdy
 * @since 1.0.0 2026/4/24
 */
public class CacheUtils {

    private static final TimedCache<String, Object> timedCache = new TimedCache<>(1000 * 60 * 60);

    static {
        // 设置每5分钟自动清理一次过期缓存（必须调用！）
        timedCache.schedulePrune(1000 * 60 * 5);
    }

    /**
     * 获取缓存值（默认会重置过期时间）
     *
     * @param key 缓存键
     * @return 缓存值
     */
    public static Object get(String key) {
        return timedCache.get(key);
    }

    /**
     * 获取缓存值，不重置过期时间
     *
     * @param key 缓存键
     * @return 缓存值
     */
    public static Object getWithoutReset(String key) {
        return timedCache.get(key, false);
    }

    /**
     * 设置缓存值（使用默认过期时间）
     *
     * @param key   缓存键
     * @param value 缓存值
     */
    public static void set(String key, Object value) {
        timedCache.put(key, value);
    }

    /**
     * 设置缓存值并指定过期时间
     *
     * @param key     缓存键
     * @param value   缓存值
     * @param timeout 过期时间（毫秒）
     */
    public static void set(String key, Object value, long timeout) {
        timedCache.put(key, value, timeout);
    }

    /**
     * 删除缓存
     *
     * @param key 缓存键
     */
    public static void delete(String key) {
        timedCache.remove(key);
    }

    /**
     * 清空所有缓存
     */
    public static void clear() {
        timedCache.clear();
    }
}
