#!/usr/bin/env python3
"""
测试文档列表功能
"""
import sys
import os
import json
sys.path.append('src')

from src.config import get_config_manager
from src.core.rag_system import RAGSystem
from src.core.index_manager import IndexManager

def test_document_list():
    """测试文档列表功能"""
    print("=" * 60)
    print("测试文档列表功能")
    print("=" * 60)
    
    try:
        # 获取配置
        config = get_config_manager()
        print(f"配置加载成功: USE_QDRANT={config.vector_store.use_qdrant}")
        
        # 创建RAG系统
        rag_system = RAGSystem(config)
        print("RAG系统创建成功")
        
        # 测试文档列表功能
        print("\n测试list_documents方法...")
        result = rag_system.list_documents()
        
        print(f"结果: {result.get('success', False)}")
        print(f"文档数量: {result.get('total_count', 0)}")
        
        if result.get('success'):
            documents = result.get('documents', [])
            print(f"✅ 成功获取到 {len(documents)} 个文档:")
            for i, doc in enumerate(documents[:5]):  # 只显示前5个
                print(f"  {i+1}. ID: {doc.get('doc_id', 'N/A')}")
                print(f"     预览: {doc.get('text_preview', 'N/A')}")
                print(f"     长度: {doc.get('text_length', 0)} 字符")
            if len(documents) > 5:
                print(f"  ... 还有 {len(documents)-5} 个文档")
            return True
        else:
            print(f"❌ 获取文档列表失败: {result.get('error', '未知错误')}")
            return False
            
    except Exception as e:
        print(f"❌ 测试过程中发生错误: {e}")
        import traceback
        traceback.print_exc()
        return False

def test_mcp_tools():
    """测试MCP工具"""
    print("\n" + "=" * 60)
    print("测试MCP工具")
    print("=" * 60)
    
    try:
        from src.mcp.handlers.tools_handler import MCPToolsHandler
        from src.services.rag_service import RAGService
        
        # 创建RAG服务
        config = get_config_manager()
        rag_service = RAGService(config)
        print("RAG服务创建成功")
        
        # 创建工具处理器
        tools_handler = MCPToolsHandler(rag_service)
        print("工具处理器创建成功")
        
        # 测试list_documents工具
        print("\n测试list_documents工具...")
        result = tools_handler.call_tool("list_documents", {"limit": 100})
        print(f"工具结果类型: {type(result)}")
        
        if result and isinstance(result, list) and len(result) > 0:
            # 解析结果
            if hasattr(result[0], 'text'):
                text_content = result[0].text
                try:
                    data = json.loads(text_content)
                    if data.get('success'):
                        documents = data.get('documents', [])
                        print(f"✅ MCP工具返回结果: {len(documents)} 个文档")
                        return True
                    else:
                        print(f"❌ MCP工具返回失败: {data.get('error', '未知错误')}")
                        return False
                except json.JSONDecodeError:
                    print(f"❌ MCP工具返回格式错误: {text_content[:100]}")
                    return False
            else:
                print(f"❌ MCP工具返回格式不正确: {result}")
                return False
        else:
            print("❌ MCP工具返回空结果")
            return False
            
    except Exception as e:
        print(f"❌ MCP工具测试失败: {e}")
        import traceback
        traceback.print_exc()
        return False

if __name__ == "__main__":
    print("开始测试文档列表功能修复...")
    
    # 测试1: 直接测试文档列表功能
    success1 = test_document_list()
    
    # 测试2: 测试MCP工具
    success2 = test_mcp_tools()
    
    print("\n" + "=" * 60)
    print("测试结果汇总")
    print("=" * 60)
    print(f"文档列表功能测试: {'✅ 成功' if success1 else '❌ 失败'}")
    print(f"MCP工具测试: {'✅ 成功' if success2 else '❌ 失败'}")
    
    if success1 and success2:
        print("\n🎉 所有测试通过！文档列表功能已修复。")
    else:
        print("\n⚠️ 部分测试失败，需要进一步调试。")