import { createClient } from 'redis';
import { logger } from './logger';

const redisUrl = process.env.REDIS_URL || 'redis://localhost:6379';

export const redisClient = createClient({
  url: redisUrl,
  socket: {
    connectTimeout: 5000,
    reconnectStrategy: (retries) => {
      if (retries > 3) {
        logger.warn('⚠️ Max Redis reconnect attempts reached. Operating in memory fallback mode.');
        return new Error('Redis max retries reached');
      }
      return Math.min(retries * 100, 3000);
    },
  },
});

redisClient.on('error', (err) => {
  logger.warn(`Redis Client Warning/Error: ${err.message}`);
});

redisClient.on('connect', () => {
  logger.info('🔴 Redis client connected successfully');
});

export const connectRedis = async (): Promise<void> => {
  try {
    await redisClient.connect();
  } catch (error) {
    logger.warn(`⚠️ Redis connection could not be established immediately: ${(error as Error).message}. Service will fallback gracefully.`);
  }
};

export const getRedisClient = () => redisClient;
