// Main RAG Engine
export { RAGEngine } from "./engine";

// Types
export type {
  RAGConfig,
  Document,
  DocumentMetadata,
  DocumentChunk,
  ChunkMetadata,
  SearchResult,
  EmbeddingModel,
  VectorStore,
  ChatMessage,
  ConversationContext,
} from "./types";

// Document Processing
export { DocumentProcessingPipeline } from "./processors/pipeline";
export type { ProcessingPipelineConfig } from "./processors/pipeline";

// Document Loaders
export { DocumentLoaderFactory } from "./loaders";
export { BaseDocumentLoader } from "./loaders/base";
export { TextDocumentLoader } from "./loaders/text";
export { PDFDocumentLoader } from "./loaders/pdf";
export { DocxDocumentLoader } from "./loaders/docx";
export { RSSLoader, NaverBlogRSSLoader, RSSFeedManager } from "./loaders/rss";
export type { RSSLoaderConfig, RSSItem, RSSFeed } from "./loaders/rss";

// Text Splitters
export { RecursiveTextSplitter } from "./splitters/recursive";
export type { TextSplitterConfig } from "./splitters/recursive";

// Embeddings
export { EmbeddingFactory } from "./embeddings";
export type { EmbeddingConfig, EmbeddingModelType } from "./embeddings";
export { OpenAIEmbeddingModel } from "./embeddings/openai";

// Vector Stores
export { VectorStoreFactory } from "./vectorstore";
export type { VectorStoreType } from "./vectorstore";
export { MemoryVectorStore } from "./vectorstore/memory";

// Storage
export { SupabaseStorageManager } from "./storage";
export type {
  SupabaseStorageConfig,
  DocumentUploadResult,
  DocumentVersion,
} from "./storage";

// Retrieval
export { QueryProcessor, HybridRetriever } from "./retrieval";
export type {
  QueryProcessingConfig,
  ProcessedQuery,
  HybridSearchConfig,
  KeywordSearchResult,
} from "./retrieval";

// Chat
export {
  ConversationContextManager,
  PromptManager,
  RAGChatbot,
  createRAGChatbot,
} from "./chat";
export type {
  ConversationConfig,
  MessageSummary,
  PromptTemplate,
  PromptContext,
  ChatbotConfig,
  ChatResponse,
  ChatRequest,
} from "./chat";

// Utility function to create a simple RAG configuration
export function createDefaultRAGConfig(
  llmApiKey: string,
  vectorStorePath: string = "./store",
  chunkSize: number = 1000,
  chunkOverlap: number = 200
) {
  return {
    embeddingModel: "text-embedding-3-small",
    chunkSize,
    chunkOverlap,
    vectorStorePath,
    supabaseConfig: {
      url: "",
      anonKey: "",
      bucket: "documents",
    },
    llmConfig: {
      modelName: "gpt-3.5-turbo",
      temperature: 0.7,
      maxTokens: 1000,
      apiKey: llmApiKey,
    },
  };
}
