import dotenv from 'dotenv';

// 加载环境变量
dotenv.config();

class VectorStore {
  constructor() {
    this.documents = [];
  }

  async init() {
    // 模拟存储不需要初始化
    return;
  }

  // 简单的文本预处理:转换为小写并去除标点
  preprocessText(text) {
    return text.toLowerCase().replace(/[^a-zA-Z0-9\s]/g, '');
  }

  async addDocument(id, text, metadata = {}) {
    // 预处理文本
    const processedText = this.preprocessText(text);
    
    // 添加到存储
    this.documents.push({
      id,
      text,
      processedText,
      metadata
    });
  }

  async addDocuments(documents) {
    // 批量添加文档
    for (const doc of documents) {
      await this.addDocument(doc.id, doc.text, doc.metadata);
    }
  }

  // 简单的关键词匹配算法
  keywordSimilarity(query, document) {
    const queryWords = new Set(this.preprocessText(query).split(/\s+/));
    const docWords = new Set(document.processedText.split(/\s+/));
    
    // 计算交集大小
    const intersection = [...queryWords].filter(word => docWords.has(word));
    
    // 计算相似度分数
    const similarity = queryWords.size > 0 ? intersection.length / queryWords.size : 0;
    return similarity;
  }

  async search(query, k = 3) {
    // 计算与所有文档的相似度
    const similarities = this.documents.map(doc => {
      const similarity = this.keywordSimilarity(query, doc);
      return {
        id: doc.id,
        document: doc.text,
        metadata: doc.metadata,
        distance: 1 - similarity // 使用1-相似度作为距离,便于排序
      };
    });
    
    // 按距离排序,取前k个
    similarities.sort((a, b) => a.distance - b.distance);
    return similarities.slice(0, k);
  }

  async clear() {
    // 清空存储
    this.documents = [];
  }
}

export default VectorStore;