import { logger } from '@goodgo/logger';
import Redis from 'ioredis';

import { appConfig } from './app.config';

// EN: Redis connection instance
// VI: Instance kết nối Redis
let redisClient: Redis | undefined;

/**
 * EN: Get or create Redis client
 * VI: Lấy hoặc tạo Redis client
 */
export const getRedisClient = (): Redis => {
    if (!redisClient) {
        redisClient = new Redis(appConfig.redisUrl, {
            // EN: Retry strategy
            // VI: Chiến lược thử lại
            retryStrategy(times) {
                const delay = Math.min(times * 50, 2000);
                return delay;
            },
            // EN: Reconnect on error
            // VI: Tự động kết nối lại khi lỗi
            maxRetriesPerRequest: 3,
        });

        redisClient.on('error', (err) => {
            logger.error('Redis connection error', { error: err.message });
        });

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

    return redisClient;
};
