const Redis = require("ioredis");
const printError = require('./logs.helpers.js').printError;
const printLog = require('./logs.helpers.js').printLog;

module.exports.setRedisValue =  async (redisSentinelHost, redisSentinelPort, redisGroupName, key, value, ttl) => {
  
  const redisClient = new Redis({
    sentinels: [{
      host: redisSentinelHost,
      port: redisSentinelPort
    },],
    name: redisGroupName,
  });

  redisClient.on('error', (error) => {
    printError('Redis client', error);
    redisClient.disconnect();
  });


  // Set key value with expiration time in seconds
  const res = await redisClient.set(key, value, 'EX', ttl).catch((error) => {
    redisClient.disconnect();
    printError('Redis client', 'Couldn\'t set redis key/value (with ttl).');
    printError('Redis client', error);
    return false;
  });


  printLog('Redis client', 'Done setting key/value pair');
  redisClient.disconnect();

  return res ? true : false;
};

module.exports.getRedisValue = async (redisSentinelHost, redisSentinelPort, redisGroupName, key) => {

  const redisClient = new Redis({
    sentinels: [{
      host: redisSentinelHost,
      port: redisSentinelPort
    },],
    name: redisGroupName,
  });

  redisClient.on('error', (error) => {
    printError('Redis client', error);
    redisClient.disconnect();
  });

  const res = await redisClient.get(key).catch((error) => {
    redisClient.disconnect();
    printError('Redis client', 'Couldn\'t get redis value.');
    printError('Redis client', error);
    return false;
  });

  printLog(`Redis client`, `Value found ${res}`);
  redisClient.disconnect();
  return res ? res : null;
};