import { LRUCache } from "lru-cache";

let maxKeys = 10000;

const cache = new LRUCache({
  max: maxKeys,
  ttl: 4 * 24 * 60 * 60 * 1000,
  allowStale: false,
  updateAgeOnGet: false,
  updateAgeOnHas: false,
});

function scaleCache() {
  const mem = process.memoryUsage();
  const freeHeap = mem.heapTotal - mem.heapUsed;
  const ratio = freeHeap / mem.heapTotal;

  const newMax = ratio > 0.5 ? 20000 : ratio < 0.2 ? 5000 : 10000;

  if (newMax !== maxKeys) {
    maxKeys = newMax;
    cache.max = maxKeys;
    console.log(`[SCALER] freeHeap ${(freeHeap / 1e6).toFixed(1)}MB → maxKeys: ${maxKeys}`);
  }
}

setInterval(scaleCache, 60_000);

scaleCache();

export default cache;