// Cache Configuration Module
// Provides LRU cache configurations to prevent memory leaks

const { LRUCache } = require('lru-cache');

/**
 * Cache configuration presets for different data types
 * All TTL values are in milliseconds
 */
const CACHE_CONFIGS = {
  // App session cookies (login tokens for SSO)
  appSessions: {
    max: 500,                    // Max 500 different services
    ttl: 60 * 60 * 1000,        // 1 hour TTL
    updateAgeOnGet: true,        // Refresh TTL on access
    ttlAutopurge: true           // Auto-cleanup expired entries
  },

  // IP-based router sessions (Frontier NVG468MQ)
  ipSessions: {
    max: 1000,                   // Support up to 1000 IP addresses
    ttl: 24 * 60 * 60 * 1000,   // 24 hour TTL
    updateAgeOnGet: true,
    ttlAutopurge: true
  },

  // DNS server authentication tokens (Technitium)
  dnsTokens: {
    max: 50,                     // Max 50 DNS servers
    ttl: 6 * 60 * 60 * 1000,    // 6 hour TTL (matches SESSION_TTL.DNS_TOKEN)
    updateAgeOnGet: false,       // Don't refresh - tokens have fixed expiry
    ttlAutopurge: true
  },

  // Tailscale network status
  tailscaleStatus: {
    max: 1,                      // Only one status object
    ttl: 60 * 1000,             // 1 minute TTL
    updateAgeOnGet: false,
    ttlAutopurge: true
  },

  // Tailscale API responses (devices, ACLs)
  tailscaleAPI: {
    max: 5,                      // devices + ACL + misc
    ttl: 5 * 60 * 1000,         // 5 min (matches sync interval)
    updateAgeOnGet: false,
    ttlAutopurge: true
  }
};

/**
 * Factory function to create a configured LRU cache
 * @param {Object} config - Cache configuration from CACHE_CONFIGS
 * @returns {LRUCache} Configured LRU cache instance
 */
function createCache(config) {
  return new LRUCache(config);
}

module.exports = { CACHE_CONFIGS, createCache };
