import { Queue } from "bullmq";
import IORedis from "ioredis";

export interface BuildJob {
  deployId: string;
  projectId: string;
  imageTag: string;
}

export interface DeployJob {
  deployId: string;
  projectId: string;
  targetId: string;
  imageTag: string;
}

const REDIS_URL = process.env.REDIS_URL ?? "redis://127.0.0.1:6379";

const globalForQueues = globalThis as unknown as {
  __pmConn?: IORedis;
  __pmBuildQueue?: Queue<BuildJob>;
  __pmDeployQueue?: Queue<DeployJob>;
};

export const connection: IORedis =
  globalForQueues.__pmConn ??
  new IORedis(REDIS_URL, { maxRetriesPerRequest: null, lazyConnect: true });
globalForQueues.__pmConn = connection;

export const buildQueue: Queue<BuildJob> =
  globalForQueues.__pmBuildQueue ??
  new Queue<BuildJob>("pm-build", { connection });
globalForQueues.__pmBuildQueue = buildQueue;

export const deployQueue: Queue<DeployJob> =
  globalForQueues.__pmDeployQueue ??
  new Queue<DeployJob>("pm-deploy", { connection });
globalForQueues.__pmDeployQueue = deployQueue;
