// src/lib/keywords/serp-import.ts — wrap the wasm SERP parser, stamp provenance.
import * as wasm from "import-core";
import { isNonCompetitorDomain } from "./serp-filter";
import type { SerpCompetitor, SerpSnapshot } from "./serp-types";

interface RawCompetitor {
  position: number;
  domain: string;
  url: string;
  backlinks: number | null;
  refDomains: number | null;
  pageAuthority: number | null;
  searchTraffic: number | null;
  urlKeywords: number | null;
}
interface RawResult {
  features: string[];
  competitors: RawCompetitor[];
}

export function parseSerpExport(
  csvText: string,
  importedAt: string,
): SerpSnapshot {
  const raw = wasm.parse_serp_urls_csv(csvText) as RawResult;
  const competitors: SerpCompetitor[] = raw.competitors
    .filter((c) => !isNonCompetitorDomain(c.domain))
    .map((c) => ({
      ...c,
      title: null,
      metaDescription: null,
      lang: null,
      images: null,
      imagesWithoutAlt: null,
      imageAlts: null,
      missingAltSrcs: null,
      hasJsonLd: null,
      jsonLdTypes: null,
      crawledAt: null,
    }));
  return {
    source: "se-ranking",
    importedAt,
    features: raw.features,
    competitors,
  };
}
