#!/usr/bin/env python3
"""
测试修复后的 Milvus 向量实现
"""

import sys
import os

# 添加项目根目录到路径
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

print("测试修复后的 Milvus 向量实现")
print("=" * 50)

def test_basic_functionality():
    """测试基本功能"""
    try:
        # 导入并初始化 MilvusVectorManager
        from foundation.database.base.vector.milvus_vector import MilvusVectorManager
        print("成功导入 MilvusVectorManager")

        # 初始化管理器
        manager = MilvusVectorManager()
        print("MilvusVectorManager 初始化成功")

        # 测试 text_to_vector 方法
        test_text = "桥梁建设技术"
        vector = manager.text_to_vector(test_text)
        print(f"text_to_vector 测试成功，向量维度: {len(vector)}")

        # 简单测试文档
        test_documents = [
            {
                'content': '四川路桥建设集团专注于桥梁和隧道工程建设',
                'metadata': {'category': 'company', 'type': 'construction'}
            },
            {
                'content': '高速公路桥梁建设技术包括预应力混凝土和钢结构',
                'metadata': {'category': 'technology', 'type': 'highway'}
            }
        ]

        collection_name = "test_fix_validation"

        print(f"\n测试 create_hybrid_collection 方法...")
        vectorstore = manager.create_hybrid_collection(
            collection_name=collection_name,
            documents=test_documents
        )
        print("create_hybrid_collection 执行成功!")
        print(f"返回的 vectorstore 类型: {type(vectorstore)}")

        # 等待索引创建完成
        import time
        time.sleep(5)

        print(f"\n测试 hybrid_search 方法...")
        param = {'collection_name': collection_name}

        # 测试加权搜索
        results = manager.hybrid_search(
            param=param,
            query_text="桥梁建设",
            top_k=2,
            ranker_type="weighted",
            dense_weight=0.7,
            sparse_weight=0.3
        )
        print(f"Hybrid search 执行成功，返回 {len(results)} 个结果")

        for i, result in enumerate(results):
            content = result.get('text_content', '')[:50]
            print(f"  {i+1}. {content}...")

        # 清理测试集合
        print(f"\n清理测试集合...")
        try:
            from pymilvus import utility
            if utility.has_collection(collection_name):
                utility.drop_collection(collection_name)
                print(f"成功清理集合: {collection_name}")
        except Exception as e:
            print(f"清理集合失败: {e}")

        return True

    except Exception as e:
        print(f"测试失败: {e}")
        import traceback
        traceback.print_exc()
        return False

if __name__ == "__main__":
    success = test_basic_functionality()
    print("\n" + "=" * 50)
    print(f"测试结果: {'成功' if success else '失败'}")

    if success:
        print("修复验证成功！")
        print("- text_to_vector 方法正常工作")
        print("- create_hybrid_collection 方法正常工作")
        print("- hybrid_search 方法正常工作")