function getVectorDbClass() {
  const { Pinecone } = require("../vectorDbProviders/pinecone");
  const { Chroma } = require("../vectorDbProviders/chroma");
  const { LanceDb } = require("../vectorDbProviders/lance");

  const vectorSelection = process.env.VECTOR_DB || "pinecone";
  switch (vectorSelection) {
    case "pinecone":
      return Pinecone;
    case "chroma":
      return Chroma;
    case "lancedb":
      return LanceDb;
    default:
      throw new Error("ENV: No VECTOR_DB value found in environment!");
  }
}

function toChunks(arr, size) {
  return Array.from({ length: Math.ceil(arr.length / size) }, (_v, i) =>
    arr.slice(i * size, i * size + size)
  );
}

function curateSources(sources = []) {
  const knownDocs = [];
  const documents = [];
  for (const source of sources) {
    const { metadata = {} } = source;
    if (
      Object.keys(metadata).length > 0 &&
      !knownDocs.includes(metadata.title)
    ) {
      documents.push({ ...metadata });
      knownDocs.push(metadata.title);
    }
  }

  return documents;
}

module.exports = {
  getVectorDbClass,
  toChunks,
  curateSources,
};