package incheon.com.config;

import com.github.benmanes.caffeine.cache.Caffeine;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.caffeine.CaffeineCacheManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.concurrent.TimeUnit;

/**
 * 캐시 설정
 * Caffeine 캐시를 사용하여 사용자별 헤더 메뉴 캐싱
 */
@Configuration
@EnableCaching
public class CacheConfig {

    /**
     * Caffeine 기반 캐시 매니저 설정
     *
     * - headerMenuByUser: 사용자별 헤더 메뉴 캐시
     * - TTL: 30분 (메뉴가 자주 변경되지 않음)
     * - Max Size: 100개 (일반적인 동시 사용자 수 고려)
     */
    @Bean
    public CacheManager cacheManager() {
        CaffeineCacheManager cacheManager = new CaffeineCacheManager("headerMenuByUser");
        cacheManager.setCaffeine(Caffeine.newBuilder()
                .expireAfterWrite(30, TimeUnit.MINUTES)
                .maximumSize(100)
                .recordStats());  // 캐시 통계 기록 (모니터링용)

        return cacheManager;
    }
}
