import { supportedScraperOperations } from "../scrapers/capabilities";

export type ScraperEngine = "playwright" | "cheerio";

export interface ScraperClassInfo {
  className: string;
  engine: ScraperEngine;
  operations: ("sale" | "rent")[];
  description: string;
}

/** Registro de clases exportadas en src/scrapers/index.ts */
export const SCRAPER_REGISTRY: ScraperClassInfo[] = [
  { className: "IdealistaPlaywrightScraper", engine: "playwright", operations: supportedScraperOperations("IdealistaPlaywrightScraper"), description: "Idealista — anti-bot DataDome, Playwright stealth" },
  { className: "FotocasaPlaywrightScraper", engine: "playwright", operations: supportedScraperOperations("FotocasaPlaywrightScraper"), description: "Fotocasa — SPA React, fallback JSON __initial_props__" },
  { className: "HabitacliaScraper", engine: "playwright", operations: supportedScraperOperations("HabitacliaScraper"), description: "Habitaclia — Didomi + Playwright" },
  { className: "PisosScraper", engine: "cheerio", operations: supportedScraperOperations("PisosScraper"), description: "Pisos.com — Cheerio + paginación" },
  { className: "GlobalizaScraper", engine: "cheerio", operations: supportedScraperOperations("GlobalizaScraper"), description: "Globaliza — Comunidad Valenciana" },
  { className: "ThinkSpainScraper", engine: "cheerio", operations: supportedScraperOperations("ThinkSpainScraper"), description: "ThinkSpain — expatriados" },
  { className: "MilanunciosScraper", engine: "cheerio", operations: supportedScraperOperations("MilanunciosScraper"), description: "Milanuncios — particulares" },
  { className: "YaencontreScraper", engine: "cheerio", operations: supportedScraperOperations("YaencontreScraper"), description: "Yaencontre — agregador" },
  { className: "TecnocasaScraper", engine: "cheerio", operations: supportedScraperOperations("TecnocasaScraper"), description: "Tecnocasa — franquicias" },
  { className: "KyeroScraper", engine: "cheerio", operations: supportedScraperOperations("KyeroScraper"), description: "Kyero — compradores internacionales" },
  { className: "CasasapoScraper", engine: "cheerio", operations: supportedScraperOperations("CasasapoScraper"), description: "Casasapo — Portugal/España" },
  { className: "VibboScraper", engine: "cheerio", operations: supportedScraperOperations("VibboScraper"), description: "Vibbo — Schibsted" },
  { className: "NuroaScraper", engine: "cheerio", operations: supportedScraperOperations("NuroaScraper"), description: "Nuroa — meta-buscador" },
  { className: "EngelVolkersScraper", engine: "cheerio", operations: supportedScraperOperations("EngelVolkersScraper"), description: "Engel & Völkers — premium" },
  { className: "EraSpainScraper", engine: "cheerio", operations: supportedScraperOperations("EraSpainScraper"), description: "ERA Spain — franquicias" },
  { className: "RemaxScraper", engine: "cheerio", operations: supportedScraperOperations("RemaxScraper"), description: "REMAX España" },
  { className: "InmobiliariaScraper", engine: "cheerio", operations: supportedScraperOperations("InmobiliariaScraper"), description: "Inmobiliaria.es" },
  { className: "SpainHousesScraper", engine: "cheerio", operations: supportedScraperOperations("SpainHousesScraper"), description: "SpainHouses — internacional" },
  { className: "HolpropScraper", engine: "cheerio", operations: supportedScraperOperations("HolpropScraper"), description: "Holprop — alquiler vacacional" },
  { className: "TrovatScraper", engine: "cheerio", operations: supportedScraperOperations("TrovatScraper"), description: "Trovit — agregador" },
  { className: "WallapopScraper", engine: "cheerio", operations: supportedScraperOperations("WallapopScraper"), description: "Wallapop — particulares cercanos" },
];

export function getScraperClassNames(): string[] {
  return SCRAPER_REGISTRY.map((s) => s.className);
}

export function findScraperInfo(className: string): ScraperClassInfo | undefined {
  return SCRAPER_REGISTRY.find((s) => s.className === className);
}
