#!/usr/bin/env node
/*
 * Guard against putting secrets in Gitea step env/with blocks.
 * Gitea/act_runner logs may render those blocks before masking is effective.
 */

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

const root = path.resolve(__dirname, "../..");
const workflowDir = path.join(root, ".gitea", "workflows");
const violations = [];
const routeViolations = [];

for (const fileName of fs.readdirSync(workflowDir).sort()) {
  if (!fileName.endsWith(".yml") && !fileName.endsWith(".yaml")) {
    continue;
  }

  const filePath = path.join(workflowDir, fileName);
  const content = fs.readFileSync(filePath, "utf8");
  const lines = content.split(/\r?\n/);
  let block = null;

  if (content.includes("TELEGRAM_ALERT_CHAT_ID")) {
    routeViolations.push(`${filePath}: legacy TELEGRAM_ALERT_CHAT_ID is not allowed; use SRE_GROUP_CHAT_ID`);
  }

  if (content.includes("TELEGRAM_CHAT_ID")) {
    routeViolations.push(`${filePath}: legacy TELEGRAM_CHAT_ID is not allowed for alert routing; use SRE_GROUP_CHAT_ID`);
  }

  let lineOffset = 0;
  lines.forEach((line, index) => {
    if (
      line.includes("api.telegram.org/bot")
      && !content.slice(Math.max(0, lineOffset - 700), lineOffset + line.length + 1200).includes("SRE_GROUP_CHAT_ID")
    ) {
      routeViolations.push(`${filePath}:${index + 1}: direct Telegram fallback must target SRE_GROUP_CHAT_ID`);
    }
    lineOffset += line.length + 1;
  });

  lines.forEach((line, index) => {
    const indent = line.match(/^\s*/)[0].length;
    const trimmed = line.trim();

    if (block && trimmed && indent <= block.indent) {
      block = null;
    }

    const blockMatch = line.match(/^(\s*)(env|with):\s*$/);
    if (blockMatch) {
      block = {
        indent: blockMatch[1].length,
        section: blockMatch[2],
      };
      return;
    }

    if (block && line.includes("${{ secrets.")) {
      violations.push(`${filePath}:${index + 1}:${block.section}`);
    }
  });
}

if (violations.length > 0) {
  console.error("Gitea workflow exposes secrets through step env/with:");
  for (const violation of violations) {
    console.error(`  - ${violation}`);
  }
  process.exit(1);
}

if (routeViolations.length > 0) {
  console.error("Gitea workflow Telegram route must converge on AwoooI SRE war room:");
  for (const violation of routeViolations) {
    console.error(`  - ${violation}`);
  }
  process.exit(1);
}

console.log("no Gitea step env/with secrets or legacy Telegram routes");
