// pm2 process definitions for the Pelagia microservices.
//
// The Next app (pm2 `ppms`) is deployed/restarted separately by
// .forgejo/workflows/deploy.yml — deliberately, so its delicate env handling
// (avoiding the runner's ephemeral FORGEJO_TOKEN) is untouched. This file covers
// only the standalone Playwright services. The deploy builds each, then runs
//   pm2 startOrReload ecosystem.config.js --update-env
// which CREATES them on first release and RELOADS them on subsequent ones.
//
// Resilient to services that aren't in the tree yet (e.g. PdfService lands with
// its feature PR): only directories that exist are registered. Ports are fixed
// here (matching the app's *_SERVICE_URL defaults). Secrets are read from the
// deploy environment at `pm2` invocation time — the deploy exports the few keys
// these services need out of App/.env first (never PORT or FORGEJO_*). Unset →
// harmless defaults (GST/EPFO stay stub-capable, PdfService skips token/origin checks).
const path = require("path");
const fs = require("fs");
const root = __dirname;

const DEFS = [
  { name: "gst-service", dir: "GstService", env: { PORT: "3003" } },
  { name: "epfo-service", dir: "EpfoService", env: { PORT: "3004", EPFO_LIVE: process.env.EPFO_LIVE || "" } },
  {
    name: "pdf-service",
    dir: "PdfService",
    env: {
      PORT: "3005",
      PDF_SERVICE_TOKEN: process.env.PDF_SERVICE_TOKEN || "",
      ALLOWED_ORIGIN: process.env.ALLOWED_ORIGIN || "",
    },
  },
];

module.exports = {
  // Key on package.json — present only when the service source is checked out
  // (a lingering gitignored node_modules/ dir must not register a phantom app).
  apps: DEFS.filter((d) => fs.existsSync(path.join(root, d.dir, "package.json"))).map((d) => ({
    name: d.name,
    cwd: path.join(root, d.dir),
    script: "dist/index.js",
    env: { NODE_ENV: "production", ...d.env },
  })),
};
