import Redis from 'ioredis';
import { env } from './env';

let redisClient: Redis | null = null;

export function getRedis(): Redis {
  if (!redisClient) {
    redisClient = new Redis(env.redisUrl, {
      connectTimeout: 5000,
      maxRetriesPerRequest: 1,
      enableOfflineQueue: false,
      enableReadyCheck: true,
      // Keep retrying forever with a capped delay so the cache recovers when
      // Redis comes back; commands fail fast in the meantime (no offline queue).
      retryStrategy: (times) => Math.min(times * 500, 10_000),
    });

    redisClient.on('error', (err) => {
      console.warn('[Redis] connection error:', err.message);
    });
  }
  return redisClient;
}

export async function closeRedis(): Promise<void> {
  if (redisClient) {
    await redisClient.quit();
    redisClient = null;
  }
}
