import { Queue } from 'bullmq';
import { Redis } from 'ioredis';
import { ISyncJobData } from '../../interfaces/sync-job-data.interface';

const ENV = process.env.ENV || process.env.NODE_ENV || 'local';

const DB_BY_ENV: Record<string, number> = {
  test: 3,
  staging: 2,
  production: 1,
  prod: 1,
  local: 1,
};

const connection = new Redis({
  host: process.env.REDIS_HOST || 'localhost',
  port: parseInt(process.env.REDIS_PORT || '6379'),
  db: Number(DB_BY_ENV[ENV] ?? 1),
  password: process.env.REDIS_PASSWORD || undefined,
  maxRetriesPerRequest: null,
});

export function getQueueConnection() {
  return connection;
}

export const syncQueue = new Queue<ISyncJobData>('syncQueue', {
  connection,
  prefix: `cb:${ENV}`,
  defaultJobOptions: {
    attempts: +(process.env.SYNC_JOB_ATTEMPTS || 3),
    backoff: {
      type: 'exponential',
      delay: +(process.env.SYNC_JOB_BACKOFF || 1000),
    },
    removeOnComplete: true,
    removeOnFail: false,
  },
});
