#!/usr/bin/env python3
"""
测试 QdrantVectorStore 补丁修复
"""
import sys
import os
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))

from loguru import logger
from qdrant_client import QdrantClient
from src.utils.patches import patch_qdrant_vector_store

def test_patch():
    """测试补丁是否修复了 QdrantVectorStore 初始化问题"""
    print("=== 测试 QdrantVectorStore 补丁修复 ===")
    
    # 应用补丁
    print("1. 应用补丁...")
    patch_qdrant_vector_store()
    
    # 导入应用补丁后的类
    from llama_index.vector_stores.qdrant import QdrantVectorStore
    
    # 尝试创建 QdrantVectorStore 实例
    print("2. 尝试创建 QdrantVectorStore 实例...")
    try:
        # 模拟 Qdrant 客户端（不实际连接）
        client = QdrantClient(host="localhost", port=6333)
        
        # 尝试创建实例
        store = QdrantVectorStore(
            collection_name="test_collection",
            client=client,
            enable_hybrid=False
        )
        
        print("✅ 成功创建 QdrantVectorStore 实例！")
        print(f"   集合名称: {store.collection_name}")
        print(f"   path 字段值: {store.path}")
        print(f"   enable_hybrid: {store.enable_hybrid}")
        
        return True
        
    except Exception as e:
        print(f"❌ 创建 QdrantVectorStore 失败: {e}")
        import traceback
        traceback.print_exc()
        return False

def test_without_patch():
    """测试未应用补丁的情况"""
    print("\n=== 测试未应用补丁的情况 ===")
    
    # 直接导入，不应用补丁
    from llama_index.vector_stores.qdrant import QdrantVectorStore as OriginalQdrantVectorStore
    from qdrant_client import QdrantClient
    
    print("1. 尝试创建原始 QdrantVectorStore 实例...")
    try:
        client = QdrantClient(host="localhost", port=6333)
        store = OriginalQdrantVectorStore(
            collection_name="test_collection",
            client=client,
            enable_hybrid=False
        )
        print("✅ 原始版本也能工作（可能已修复）")
        return True
    except Exception as e:
        print(f"❌ 原始版本失败（预期）: {e}")
        return False

if __name__ == "__main__":
    # 先测试原始版本（应该会失败）
    test_without_patch()
    
    # 测试应用补丁后的版本
    success = test_patch()
    
    if success:
        print("\n✅ 补丁测试通过！")
        sys.exit(0)
    else:
        print("\n❌ 补丁测试失败！")
        sys.exit(1)