/**
 * Regression guard for #1759: the --no-input flag was removed from Claude Code
 * >= v2.1.81 and causes an immediate crash ("error: unknown option '--no-input'").
 *
 * The -p / --print flag already handles non-interactive output so --no-input
 * must never appear in workflow, command, or agent files.
 */
const { describe, test } = require('node:test');
const assert = require('node:assert/strict');
const fs = require('fs');
const path = require('path');

const ROOT = path.join(__dirname, '..');

/** Recursively collect all .md files under a directory. */
function collectMdFiles(dir) {
  const results = [];
  if (!fs.existsSync(dir)) return results;
  for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
    const full = path.join(dir, entry.name);
    if (entry.isDirectory()) {
      results.push(...collectMdFiles(full));
    } else if (entry.isFile() && entry.name.endsWith('.md')) {
      results.push(full);
    }
  }
  return results;
}

const SCAN_DIRS = [
  path.join(ROOT, 'get-shit-done', 'workflows'),
  path.join(ROOT, 'get-shit-done', 'references'),
  path.join(ROOT, 'commands', 'gsd'),
  path.join(ROOT, 'agents'),
];

describe('workflow CLI compatibility (#1759)', () => {
  test('no workflow/command/agent file uses the deprecated --no-input flag', () => {
    const violations = [];

    for (const dir of SCAN_DIRS) {
      for (const file of collectMdFiles(dir)) {
        const content = fs.readFileSync(file, 'utf-8');
        if (content.includes('--no-input')) {
          const rel = path.relative(ROOT, file);
          violations.push(rel);
        }
      }
    }

    assert.strictEqual(
      violations.length,
      0,
      [
        '--no-input was removed in Claude Code >= v2.1.81 and must not appear in any workflow/command/agent file.',
        'Use -p / --print instead (already implies non-interactive output).',
        'Violations found:',
        ...violations.map(v => '  ' + v),
      ].join('\n')
    );
  });
});
