import { Worker } from "bullmq";
import { connection } from "@/lib/queue";
import { runBuild } from "./jobs/build";
import { runDeploy } from "./jobs/deploy";

console.log("PM worker starting…");

const buildWorker = new Worker(
  "pm-build",
  async (job) => {
    console.log(`[build] received job ${job.id}`);
    return runBuild(job.data);
  },
  { connection },
);

const deployWorker = new Worker(
  "pm-deploy",
  async (job) => {
    console.log(`[deploy] received job ${job.id}`);
    return runDeploy(job.data);
  },
  { connection },
);

buildWorker.on("completed", (j) => console.log(`build:${j.id} done`));
buildWorker.on("failed", (j, err) =>
  console.error(`build:${j?.id} failed:`, err.message),
);
deployWorker.on("completed", (j) => console.log(`deploy:${j.id} done`));
deployWorker.on("failed", (j, err) =>
  console.error(`deploy:${j?.id} failed:`, err.message),
);

console.log("PM worker ready");

// Graceful shutdown
process.on("SIGTERM", async () => {
  console.log("SIGTERM received, closing workers…");
  await Promise.all([buildWorker.close(), deployWorker.close()]);
  process.exit(0);
});
