package incheon.sgp.rst.service.impl;

import incheon.sgp.rst.mapper.RstCommonCodeMapper;
import incheon.sgp.rst.service.RstCommonCodeService;
import lombok.AllArgsConstructor;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;

import org.springframework.stereotype.Service;

import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

@Slf4j
@Service
@RequiredArgsConstructor
public class RstCommonCodeServiceImpl implements RstCommonCodeService {

    private final RstCommonCodeMapper RstCommonCodeMapper;

    // 서버 캐싱(간단한 메모리 캐시, TTL 적용)
    private final Map<String, CacheEntry> cache = new ConcurrentHashMap<>();
    private static final long CACHE_TTL_MILLIS = 10 * 60 * 1000; // 10분

    @Override
    public List<CodeOption> getOptionsByListId(String listId) {
        long now = Instant.now().toEpochMilli();
        CacheEntry cached = cache.get(listId);
        if (cached != null && (now - cached.cachedAtMillis) < CACHE_TTL_MILLIS) {
            return cached.options;
        }
        List<CodeOption> fetched = RstCommonCodeMapper.selectOptionsByListId(listId);
        if (fetched == null) fetched = new ArrayList<>();
        cache.put(listId, new CacheEntry(now, fetched));
        return fetched;
    }

    @AllArgsConstructor
    private static class CacheEntry {
        long cachedAtMillis;
        List<CodeOption> options;
    }
}


