#!/usr/bin/env node
import { execFileSync } from 'node:child_process';
import { existsSync, readFileSync } from 'node:fs';

/** Returns package directories that contain a source directory. */
function listSrcParents() {
  let out;
  try {
    out = execFileSync('find', ['packages', '-type', 'd', '-name', 'src'], { encoding: 'utf8' });
  } catch (error) {
    const message = error instanceof Error ? error.message : String(error);
    process.stderr.write(`Failed to list package source directories: ${message}\n`);
    process.exit(1);
  }
  return out
    .split(/\r?\n/)
    .filter(Boolean)
    .map((p) => p.replace(/\/src$/, ''))
    .filter((p) => !/coverage|\.turbo|node_modules/.test(p));
}

const dirs = listSrcParents();
const errors = [];
const warnings = [];

for (const dir of dirs) {
  const readme = `${dir}/README.md`;
  if (!existsSync(readme)) {
    errors.push(`${dir}: missing README.md`);
    continue;
  }
  const txt = readFileSync(readme, 'utf8');
  if (!/^#\s+/m.test(txt)) warnings.push(`${dir}: README missing top-level title`);
  if (!/^##\s+Responsibilities/m.test(txt))
    warnings.push(`${dir}: README missing 'Responsibilities' section`);
}

if (errors.length) {
  console.error(`README validation failed:\n${errors.map((e) => ` - ${e}`).join('\n')}`);
  if (warnings.length)
    console.warn(`README warnings:\n${warnings.map((w) => ` - ${w}`).join('\n')}`);
  process.exit(1);
} else if (warnings.length) {
  console.warn(`README warnings:\n${warnings.map((w) => ` - ${w}`).join('\n')}`);
  console.log('Package README presence validated.');
  process.exit(0);
} else {
  console.log('All package READMEs passed validation.');
}