import fs from "node:fs";

/** @type {import("eslint").Rule.RuleModule} */
export default {
  meta: {
    type: "problem",
    docs: {
      description:
        "Every *.use-case.ts file must have a sibling *.use-case.test.ts (TDD discipline).",
    },
    schema: [],
    messages: {
      missingTestFile:
        "Use case {{filename}} has no sibling test file at {{expected}}. Write the red test first.",
    },
  },
  create(context) {
    return {
      Program(node) {
        const filename = context.filename;
        if (!filename.endsWith(".use-case.ts")) return;
        const expected = filename.replace(/\.use-case\.ts$/, ".use-case.test.ts");
        if (fs.existsSync(expected)) return;
        context.report({
          node,
          messageId: "missingTestFile",
          data: { filename: filename.split("/").pop(), expected: expected.split("/").pop() },
        });
      },
    };
  },
};
