const fs = require('fs-extra');
const path = require('path');
const { getCadInfo } = require('./router');

const MAX_SCAN_DEPTH = 8;

function toCadKey(cadInfo) {
  return String(cadInfo?.key || '').toLowerCase();
}

async function buildExistingCadKeyIndex(destinationRoot) {
  const keys = new Set();

  if (!destinationRoot || !(await fs.pathExists(destinationRoot))) {
    return keys;
  }

  async function walk(currentDir, depth) {
    if (depth > MAX_SCAN_DEPTH) {
      return;
    }

    let entries;
    try {
      entries = await fs.readdir(currentDir, { withFileTypes: true });
    } catch {
      return;
    }

    for (const entry of entries) {
      const fullPath = path.join(currentDir, entry.name);

      if (entry.isDirectory()) {
        await walk(fullPath, depth + 1);
        continue;
      }

      if (!entry.isFile()) {
        continue;
      }

      const cadInfo = getCadInfo(entry.name);
      if (!cadInfo) {
        continue;
      }

      keys.add(toCadKey(cadInfo));
    }
  }

  await walk(destinationRoot, 0);
  return keys;
}

module.exports = { buildExistingCadKeyIndex, toCadKey };
