#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
文档内容提取示例
专注于文档内容提取功能，不包含网络搜索
"""

import os
import sys
from pathlib import Path

# 添加项目根目录到Python路径
project_root = Path(__file__).parent
sys.path.insert(0, str(project_root))

from document import TextExtractor, ContentIntegrator, ContentTransformer
from api.services.document_service import DocumentService

def test_single_document_extraction():
    """测试单个文档提取"""
    print("=== 单个文档提取测试 ===")
    
    # 创建文档服务
    service = DocumentService()
    
    # 测试文件路径（请替换为实际的文件路径）
    test_file = "test_document.pdf"  # 替换为实际文件路径
    
    if not os.path.exists(test_file):
        print(f"测试文件不存在: {test_file}")
        print("请将一个测试文档放在当前目录下，或修改test_file变量")
        return
    
    # 仅提取文本
    print(f"提取文档: {test_file}")
    result = service.extract_text_only(test_file)
    
    if result['success']:
        doc = result['document']
        print(f"文件名: {doc['filename']}")
        print(f"文件类型: {doc['file_type']}")
        print(f"文件大小: {doc['file_size']} 字节")
        print(f"内容长度: {doc['content_length']} 字符")
        print(f"页数: {doc['page_count']}")
        print(f"提取时间: {doc['extracted_at']}")
        print("\n内容预览:")
        print(doc['content'][:500] + "..." if len(doc['content']) > 500 else doc['content'])
    else:
        print(f"提取失败: {result['error']}")

def test_multiple_documents_processing(save_path):
    """测试多个文档处理"""
    print("\n=== 多个文档处理测试 ===")
    
    # 创建文档服务
    service = DocumentService()
    
    # 测试文件列表（请替换为实际的文件路径）
    test_files = [
        "document/sample_documents/Ai服务商家资料收集202506.xlsx",
        "document/sample_documents/ai营销括客话术和QA整理.docx",
        "document/sample_documents/附件1-服务器租赁发票20250702.pdf"
    ]
    
    # 过滤存在的文件
    existing_files = [f for f in test_files if os.path.exists(f)]
    
    if not existing_files:
        print("没有找到测试文件")
        print("请将测试文档放在当前目录下，或修改test_files变量")
        return
    
    print(f"处理文档: {existing_files}")
    
    # 处理多个文档
    result = service.process_multiple_documents(existing_files, output_format='summary')
    
    if result['success']:
        print(f"处理摘要:")
        summary = result['processing_summary']
        print(f"  总文件数: {summary['total_files']}")
        print(f"  成功提取: {summary['successful_extractions']}")
        print(f"  失败提取: {summary['failed_extractions']}")
        
        print(f"\n文档列表:")
        for i, doc in enumerate(result['documents'], 1):
            print(f"  {i}. {doc['filename']} ({doc['file_type']}) - {doc['content_length']} 字符")
        
        print(f"\n整合内容:")
        integrated = result['integrated_content']
        print(f"  文档数量: {integrated['document_count']}")
        print(f"  总内容长度: {integrated['total_content_length']}")
        print(f"  文档类型: {integrated['document_types']}")
        print(f"  关键主题: {integrated['key_topics']}")
        
        print(f"\n内容摘要:")
        print(integrated['content_summary'])
        
        print(f"\n转换后的内容:")
        transformed = result['transformed_content']
        print(f"  格式类型: {transformed['format_type']}")
        print(f"  转换时间: {transformed['transformed_at']}")
        print("\n转换内容预览:")
        content = transformed['content']
        # print(content[:1000] + "..." if len(content) > 1000 else content)
        if save_path:
            with open(save_path, 'w', encoding='utf-8') as f:
                f.write(content)
            print(f"转换后的内容已保存到: {save_path}")
    else:
        print(f"处理失败: {result['error']}")

def test_component_usage():
    """测试组件单独使用"""
    print("\n=== 组件单独使用测试 ===")
    
    # 测试文件
    test_file = "test_document.txt"
    
    # 创建测试文件
    if not os.path.exists(test_file):
        with open(test_file, 'w', encoding='utf-8') as f:
            f.write("""
这是一个测试文档。

主要内容包括：
1. 文档提取功能测试
2. 内容整合功能测试
3. 内容转换功能测试

测试文档包含中文内容，用于验证文本提取和处理功能。
            """)
        print(f"创建测试文件: {test_file}")
    
    # 1. 文本提取器测试
    print("\n1. 文本提取器测试")
    extractor = TextExtractor()
    extracted_doc = extractor.extract(test_file)
    
    print(f"提取结果:")
    print(f"  文件名: {extracted_doc.filename}")
    print(f"  文件类型: {extracted_doc.file_type}")
    print(f"  内容长度: {len(extracted_doc.content)}")
    print(f"  内容: {extracted_doc.content}")
    
    # 2. 内容整合器测试
    print("\n2. 内容整合器测试")
    integrator = ContentIntegrator()
    integrated_content = integrator.integrate_documents([extracted_doc])
    
    print(f"整合结果:")
    print(f"  文档数量: {integrated_content.document_count}")
    print(f"  总内容长度: {integrated_content.total_content_length}")
    print(f"  文档类型: {integrated_content.document_types}")
    print(f"  关键主题: {integrated_content.key_topics}")
    print(f"  内容摘要: {integrated_content.content_summary}")
    
    # 3. 内容转换器测试
    print("\n3. 内容转换器测试")
    transformer = ContentTransformer()
    
    # 测试不同格式
    formats = ['summary', 'attraction_standard', 'product_sales', 'travel_guide', 'blog_post']
    
    for format_type in formats:
        print(f"\n--- {format_type} 格式 ---")
        transformed_content = transformer.transform_content(integrated_content, format_type=format_type)
        print(f"转换结果预览:")
        content = transformed_content.transformed_text
        print(content[:300] + "..." if len(content) > 300 else content)

def test_service_info():
    """测试服务信息"""
    print("\n=== 服务信息测试 ===")
    
    service = DocumentService()
    
    print("支持的文件类型:")
    file_types = service.get_supported_file_types()
    print(f"  {file_types}")
    
    print("\n支持的输出格式:")
    output_formats = service.get_supported_formats()
    print(f"  {output_formats}")
    
    print("\n服务状态:")
    status = service.get_service_status()
    print(f"  服务名: {status['service_name']}")
    print(f"  状态: {status['status']}")
    print(f"  组件: {status['components']}")
    print(f"  时间戳: {status['timestamp']}")

def main():
    """主函数"""
    print("文档内容提取示例程序")
    print("=" * 50)
    
    try:
        # 测试服务信息
        test_service_info()
        
        # 测试组件单独使用
        test_component_usage()
        
        # 测试单个文档提取
        test_single_document_extraction()
        
        # 测试多个文档处理
        test_multiple_documents_processing("document/sample_documents/test.txt")
        
        print("\n" + "=" * 50)
        print("测试完成！")
        
    except Exception as e:
        print(f"测试过程中发生错误: {str(e)}")
        import traceback
        traceback.print_exc()

if __name__ == "__main__":
    main() 