interface CacheEntry<T> {
  data:      T;
  expiresAt: number;
}

const store = new Map<string, CacheEntry<unknown>>();

export const cache = {
  get: <T>(key: string): T | null => {
    const entry = store.get(key);
    if (!entry) return null;
    if (Date.now() > entry.expiresAt) {
      store.delete(key); // nettoyage automatique
      return null;
    }
    return entry.data as T;
  },

  set: <T>(key: string, data: T, ttlSeconds = 300): void => {
    store.set(key, {
      data,
      expiresAt: Date.now() + ttlSeconds * 1000,
    });
  },

  delete: (key: string): void => {
    store.delete(key);
  },

  clear: (): void => {
    store.clear();
  },

  // Utile pour déboguer — liste toutes les clés en cache
  keys: (): string[] => Array.from(store.keys()),
};