#!/usr/bin/env node
/**
 * Aggiunge un listener HTTPS alla sezione `listeners` del gateway.yaml.
 *
 * Uso:
 *   node add-listener.js <hostname> <name> <secret-name> [gateway-file]
 *
 * Esempio:
 *   node add-listener.js sonarqube.italiadatacenter.com https-sonarqube sonarqube-secret
 *   node add-listener.js grafana.italiadatacenter.com  https-grafana    grafana-secret  gateway.yaml
 */

const fs   = require('fs');
const path = require('path');

const [,, hostname, name, secretName, gatewayFile = 'gateway.yaml'] = process.argv;

if (!hostname || !name || !secretName) {
  console.error('Uso: node add-listener.js <hostname> <name> <secret-name> [gateway-file]');
  console.error('Es.: node add-listener.js sonarqube.italiadatacenter.com https-sonarqube sonarqube-secret');
  process.exit(1);
}

const filepath = path.resolve(__dirname, gatewayFile);

if (!fs.existsSync(filepath)) {
  console.error(`File non trovato: ${filepath}`);
  process.exit(1);
}

const content = fs.readFileSync(filepath, 'utf8');

// Controlla se il listener esiste già (per nome o hostname)
if (content.includes(`name: ${name}`) || content.includes(`hostname: ${hostname}`)) {
  console.warn(`Attenzione: un listener con name "${name}" o hostname "${hostname}" esiste già. Nessuna modifica applicata.`);
  process.exit(0);
}

const newBlock = `    - allowedRoutes:
        namespaces:
          from: All
      hostname: ${hostname}
      name: ${name}
      port: 443
      protocol: HTTPS
      tls:
        certificateRefs:
        - group: ""
          kind: Secret
          name: ${secretName}
        mode: Terminate`;

// Inserisce il nuovo block prima della riga "kind: List" o in fondo alla lista listeners
// Trova l'ultima occorrenza di "mode: Terminate" e appende subito dopo
const lastTerminateIdx = content.lastIndexOf('        mode: Terminate');
if (lastTerminateIdx === -1) {
  console.error('Impossibile trovare il punto di inserimento (mode: Terminate). File non modificato.');
  process.exit(1);
}

const insertAfter = lastTerminateIdx + '        mode: Terminate'.length;
const updated = content.slice(0, insertAfter) + '\n' + newBlock + content.slice(insertAfter);

fs.writeFileSync(filepath, updated, 'utf8');
console.log(`Listener aggiunto:`);
console.log(`  hostname : ${hostname}`);
console.log(`  name     : ${name}`);
console.log(`  secret   : ${secretName}`);
console.log(`File aggiornato: ${filepath}`);
