// @ts-check
const path = require("path");
const glob = require("glob");
const { forStrictNullCheckEligibleFiles, forEachFileInSrc } = require("./src/getStrictNullCheckEligibleFiles");
const { getImportsForFile } = require("./src/tsHelper");

const projectRoot = path.join(process.cwd());
const srcRoot = path.join(projectRoot, "src");

let sort = true;
let filter;
let printDependedOnCount = true;
let includeTests = false;

// if (false) {
//   // Generate test files listing
//   sort = false;
//   filter = x => x.endsWith(".test.ts");
//   printDependedOnCount = false;
//   includeTests = true;
// }

forStrictNullCheckEligibleFiles(projectRoot, () => {}, { includeTests }).then(async eligibleFiles => {
  console.log(eligibleFiles);
  // const eligibleSet = new Set(eligibleFiles);
  // const dependedOnCount = new Map(eligibleFiles.map(file => [file, 0]));
  // for (const file of await forEachFileInSrc(srcRoot)) {
  //   if (eligibleSet.has(file)) {
  //     // Already added
  //     continue;
  //   }
  //   for (const imp of getImportsForFile(file, srcRoot)) {
  //     if (dependedOnCount.has(imp)) {
  //       dependedOnCount.set(imp, dependedOnCount.get(imp) + 1);
  //     }
  //   }
  // }
  // let out = Array.from(dependedOnCount.entries());
  // if (filter) {
  //   out = out.filter(x => filter(x[0]));
  // }
  // if (sort) {
  //   out = out.sort((a, b) => b[1] - a[1]);
  // }
  // for (const pair of out) {
  //   console.log(toFormattedFilePath(pair[0]) + (printDependedOnCount ? ` — Depended on by **${pair[1]}** files` : ""));
  // }
});

// function toFormattedFilePath(file) {
//   // return `"./${path.relative(srcRoot, file)}",`;
//   return `- [ ] \`"./${path.relative(srcRoot, file)}"\``;
// }