/**
 * Live canary (TECHNICAL-SPEC §4): search a known-good part number against every
 * enabled store and assert each returns ≥1 valid offer. Touches real stores —
 * run manually or via cron, never in CI.
 *
 * Walled (onDemand) stores need the resident browser and are SKIPPED by default;
 * pass --walled to include them.
 */
import { enabledAdapters } from "../src/core/registry.js";
import { normalizeQuery } from "../src/core/normalize.js";
import { config } from "../src/core/config.js";
import { PoliteHttp } from "../src/core/politeHttp.js";
import { BrowserHub } from "../src/core/browserHub.js";
import { OfferSchema, runAdapterSearch } from "../src/core/types.js";
import type { FetchContext } from "../src/core/types.js";

const CANARY_PART = "W 712/52"; // common MANN oil filter, stocked everywhere

const includeWalled = process.argv.includes("--walled");
const q = normalizeQuery(CANARY_PART)!;
const browser = new BrowserHub(config.browser);
const ctx: FetchContext = { http: new PoliteHttp(), browser };
let failed = false;

const targets = enabledAdapters().filter(
  (a) => includeWalled || (a.fetchMode ?? "auto") === "auto",
);

for (const adapter of targets) {
  const started = Date.now();
  try {
    const offers = await runAdapterSearch(adapter, q, ctx);
    const valid = offers.filter((o) => OfferSchema.safeParse(o).success);
    const ms = Date.now() - started;
    if (valid.length > 0) {
      const cheapest = Math.min(...valid.map((o) => o.priceEur));
      console.log(`✅ ${adapter.id}: ${valid.length} valid offer(s), cheapest ${cheapest.toFixed(2)} € (${ms}ms)`);
    } else {
      failed = true;
      console.error(`❌ ${adapter.id}: parsed ${offers.length} offer(s), 0 valid — markup change? (${ms}ms)`);
    }
  } catch (err) {
    failed = true;
    console.error(`❌ ${adapter.id}: ${(err as Error).message}`);
  }
}

await browser.close();
process.exit(failed ? 1 : 0);
