import fs from "node:fs";
import path from "node:path";
import type { ProcessStep } from "../mortgage/gates";

export type ChunkHit = {
  id: string;
  text: string;
  title: string;
  source_path: string;
  score: number;
  lane: "knowledge" | "vertical";
};

type StoreFile = {
  items: Array<{
    id: string;
    text: string;
    title?: string;
    source_path: string;
    vector: number[];
  }>;
};

const cache = new Map<string, StoreFile>();

function repoRoot() {
  return path.resolve(process.cwd(), "..");
}

function loadStore(rel: string): StoreFile {
  if (cache.has(rel)) return cache.get(rel)!;
  const full = path.join(repoRoot(), rel);
  const data = JSON.parse(fs.readFileSync(full, "utf8")) as StoreFile;
  cache.set(rel, data);
  return data;
}

/** Customer talk tracks from knowledge_base → data/knowledge (not HTML). */
export function knowledgeStoresForStep(step: ProcessStep): string[] {
  if (step === 3) return ["data/knowledge/bmi/embeddings.json"];
  if (step === 4) return ["data/knowledge/health/embeddings.json"];
  return ["data/knowledge/mortgage/embeddings.json"];
}

/** Field / UW facts from data/verticals (HTML datasets). Not used for spoken copy. */
export function verticalStoresForStep(step: ProcessStep): string[] {
  if (step === 3) return ["data/verticals/bmi/embeddings.json", "data/verticals/mortgage/embeddings.json"];
  if (step === 4 || step === 6) {
    return ["data/verticals/health/embeddings.json", "data/verticals/mortgage/embeddings.json"];
  }
  return ["data/verticals/mortgage/embeddings.json"];
}

/** @deprecated mixed list — prefer knowledgeStoresForStep + verticalStoresForStep */
export function storesForStep(step: ProcessStep): string[] {
  return [...knowledgeStoresForStep(step), ...verticalStoresForStep(step)];
}

export { loadStore };
