/**
 * ecosystem.config.js – PM2 Prozess-Konfiguration für Rebreak
 *                       (backend/-Layout, post-cutover)
 *
 * Repo-Root:  /srv/rebreak
 * Backend:    /srv/rebreak/backend  (standalone Nitro)
 * Node:       /root/.nvm/versions/node/v24.11.1/bin/node
 *
 * Aktivierung auf Server:
 *   pm2 startOrReload /srv/rebreak/ecosystem.config.js
 */

const NODE_BIN = "/root/.nvm/versions/node/v24.11.1/bin/node";
const REPO_ROOT = "/srv/rebreak";
const APP_DIR = `${REPO_ROOT}/backend`;

module.exports = {
  apps: [
    // ─── Rebreak Staging (Nitro standalone) ────────────────────────────────
    {
      name: "rebreak-staging",
      script: `${APP_DIR}/start-staging.sh`,
      interpreter: "bash",
      cwd: APP_DIR,
      instances: 1,
      autorestart: true,
      watch: false,
      max_memory_restart: "700M",
      env: {
        NODE_ENV: "production",
        PORT: "3016",
        NITRO_PORT: "3016",
      },
    },

    // ─── Rebreak Prod (Nitro standalone) ───────────────────────────────────
    // Wird erst aktiviert wenn Phase 3 (DNS-Cutover) abgeschlossen ist.
    // start-prod.sh wird analog start-staging.sh aufgesetzt
    // (existiert noch nicht im backend/ — nicht-blockierend für Cutover).
    // Start: pm2 start ecosystem.config.js --only rebreak
    // {
    //   name: "rebreak",
    //   script: `${APP_DIR}/start-prod.sh`,
    //   interpreter: "bash",
    //   cwd: APP_DIR,
    //   instances: 1,
    //   autorestart: true,
    //   watch: false,
    //   max_memory_restart: "700M",
    //   env: {
    //     NODE_ENV: "production",
    //     PORT: "3015",
    //     NITRO_PORT: "3015",
    //   },
    // },

    // ─── Admin Staging (Nuxt 4 SSR, port 3017) ────────────────────────────
    // Wird einmalig via SSH initial gestartet (pm2 start ecosystem.config.js --only rebreak-admin-staging).
    // Danach: deploy-admin-from-artifact.sh uebernimmt Restarts.
    // start-admin-staging.sh: infisical run + node .output-staging/server/index.mjs
    {
      name: "rebreak-admin-staging",
      script: `${REPO_ROOT}/apps/admin/start-admin-staging.sh`,
      interpreter: "bash",
      cwd: `${REPO_ROOT}/apps/admin`,
      instances: 1,
      autorestart: true,
      watch: false,
      max_memory_restart: "400M",
      env: {
        NODE_ENV: "production",
        PORT: "3017",
        NITRO_PORT: "3017",
      },
    },

    // ─── Webhook-Listener ──────────────────────────────────────────────────
    {
      name: "rebreak-webhook",
      script: `${REPO_ROOT}/scripts/deploy-webhook/server.mjs`,
      interpreter: NODE_BIN,
      cwd: REPO_ROOT,
      instances: 1,
      autorestart: true,
      watch: false,
      max_memory_restart: "128M",
    },

    // ─── IMAP IDLE Daemon Staging ───────────────────────────────────────────
    // Deployment-Anleitung: docs/internal/MAIL_DAEMON_DEPLOYMENT.md
    // start-idle-staging.sh injiziert Infisical-Secrets (DATABASE_URL, ADMIN_SECRET, ENCRYPTION_KEY).
    // Initialer Start via: pm2 startOrReload /srv/rebreak/ecosystem.config.js
    {
      name: "rebreak-idle-staging",
      script: `${APP_DIR}/imap-idle/start-idle-staging.sh`,
      interpreter: "bash",
      cwd: `${APP_DIR}/imap-idle`,
      instances: 1,
      autorestart: true,
      watch: false,
      max_memory_restart: "256M",
      env: { NODE_ENV: "production" },
    },

    // ─── DNS-Blocker (auskommentiert bis DNS-Daemons aufgesetzt sind) ──────
    // {
    //   name: "dns-rebreak",
    //   script: `${APP_DIR}/server/dns/start-prod.sh`,
    //   interpreter: "bash",
    //   cwd: `${APP_DIR}/server/dns`,
    //   instances: 1,
    //   autorestart: true,
    //   watch: false,
    //   max_memory_restart: "512M",
    // },
    // {
    //   name: "dns-rebreak-staging",
    //   script: `${APP_DIR}/server/dns/start-staging.sh`,
    //   interpreter: "bash",
    //   cwd: `${APP_DIR}/server/dns`,
    //   instances: 1,
    //   autorestart: true,
    //   watch: false,
    //   max_memory_restart: "512M",
    // },
  ],
};
