// src/lib/keywords/import/serp-filename.ts — derive a SERP export's target
// keyword from its FILENAME. Pure module (zero I/O) — the caller resolves the
// hint against a real keyword via resolve-keyword-actions.ts.

/**
 * Ordered, extensible registry of filename → { provider, term } patterns.
 * First match wins. Each entry documents the SERP tool it recognizes.
 *
 * IMPORTANT: Ne JAMAIS ajouter un pattern sans un exemple de nom de fichier
 * RÉEL (export authentique du provider). Les formats restants à collecter
 * sont suivis dans docs/project/imports-follow-ups.md.
 */
export const SERP_FILENAME_PATTERNS: Array<{
  provider: string;
  re: RegExp;
  term: (m: RegExpMatchArray) => string;
}> = [
  // Mangools SERPChecker — verified real export name:
  // `serpchecker_jewelry_manufacturers_export.csv` → term "jewelry manufacturers".
  {
    provider: "mangools-serpchecker",
    re: /^serpchecker_(.+)_export\.csv$/i,
    term: (m) => m[1].replace(/_+/g, " ").trim(),
  },
];

/**
 * Strip a browser-added duplicate-download suffix (`" (1)"`, `"-2"`, …) right
 * before the extension, so `serpchecker_x_export (1).csv` and
 * `serpchecker_x_export-2.csv` still match the base pattern.
 */
function stripDuplicateSuffix(filename: string): string {
  return filename.replace(/(?:\s*\(\d+\)|-\d+)(\.[^.]+)$/i, "$1");
}

/**
 * Extract the SERP provider + target term from an export's filename, trying
 * each registered pattern in order. Returns `null` when no pattern matches.
 */
export function extractSerpFilenameHint(
  filename: string,
): { provider: string; term: string } | null {
  const cleaned = stripDuplicateSuffix(filename.trim());
  for (const pattern of SERP_FILENAME_PATTERNS) {
    const m = cleaned.match(pattern.re);
    if (m) {
      const term = pattern.term(m);
      if (term) return { provider: pattern.provider, term };
    }
  }
  return null;
}
