const config = require('../config');
const { promisify } = require('util');
const r = require('redis');

const redisOptions = {
  host: '127.0.0.1',
  port: 6379,
};

if (config.redis_db) {
  redisOptions.db = config.redis_db;
}

if (config.redis_host) {
  redisOptions.host = config.redis_host;
}

if (config.redis_port && config.redis_port > 0) {
  redisOptions.port = config.redis_port;
}

if (config.redis_password) {
  redisOptions.password = config.redis_password;
}

// Stub Redis if disabled
const stub = {
  get: (_, callback) => callback(null, null),
  setex: (_, _1, _2, callback) => callback(null),
  on: () => {},
};

const redisDisabled = !config.redis_enabled;

const redis = redisDisabled ? stub : r.createClient(redisOptions);

const redisAsync = {
  get: promisify(redis.get).bind(redis),
  setex: promisify(redis.setex).bind(redis),
};

redis.on('error', (error) => {
  if (error) {
    console.error(`Redis error: ${error}`);
  }
});

module.exports = {
  redis,
  redisAsync,
};