/**
 * Search smoke test.
 *
 * Runs the queries from the project brief through the real search pipeline and
 * prints the ranked results, so a change to the index or the ranker can be
 * checked without opening a browser.
 *
 * Usage: npm run search:check
 */

import { search } from "../src/lib/search";
import { parseSearchParams } from "../src/lib/search-utils";

const QUERIES = [
  "headphones for travelling",
  "something for working out",
  "comfortable shoes for running",
  "gift for someone who loves music",
  "cheap wireless headphones",
];

async function main(): Promise<void> {
  for (const query of QUERIES) {
    const parsed = parseSearchParams(new URLSearchParams({ q: query }));
    if (!parsed.ok) {
      console.error(`invalid query ${query}`, parsed.errors);
      continue;
    }

    const { response } = await search(parsed.value);
    console.log(`\n"${query}"  (${response.meta.took}ms, provider ${response.meta.provider})`);

    if (response.results.length === 0) {
      console.log("  no results");
      continue;
    }

    for (const [rank, result] of response.results.slice(0, 5).entries()) {
      const { product, score, similarity, keywordScore } = result;
      console.log(
        `  ${rank + 1}. ${product.name} — score ${score.toFixed(3)} ` +
          `(sim ${similarity.toFixed(3)}, kw ${keywordScore.toFixed(3)}) $${product.price}`,
      );
    }
  }
}

main().catch((error: unknown) => {
  console.error("search check failed:", error);
  process.exitCode = 1;
});
