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

"""
Document Processing Test Script
文档处理功能测试脚本 - 测试重构后的文档处理流水线
"""

import asyncio
import json
from pathlib import Path
from datetime import datetime

from travel_algorithms import (
    create_document_pipeline,
    create_default_config,
    DocumentProcessor,
    TextExtractor,
    ContentIntegrator,
    ContentTransformer
)


async def test_complete_pipeline():
    """测试完整的文档处理流水线"""
    
    print("📄 文档处理完整流水线测试")
    print("=" * 50)
    
    # 1. 创建配置和流水线
    print("\n📋 创建配置和流水线...")
    config = create_default_config(
        resource_base_directory="./resource",
        ai_model="qwen-plus"
    )
    
    pipeline = create_document_pipeline(config)
    document_processor = pipeline["document_processor"]
    
    print("✅ 文档处理流水线创建成功")
    
    # 2. 测试支持的格式
    print("\n📊 支持的格式:")
    supported_formats = document_processor.get_supported_formats()
    print(f"输入格式: {list(supported_formats['input_formats'].keys())}")
    print(f"输出格式: {list(supported_formats['output_formats'].keys())}")
    
    # 3. 创建测试文档
    print("\n📝 创建测试文档...")
    test_docs_dir = Path("test_documents")
    test_docs_dir.mkdir(exist_ok=True)
    
    # 创建测试文本文件
    test_txt = test_docs_dir / "景区介绍.txt"
    with open(test_txt, 'w', encoding='utf-8') as f:
        f.write("""北京故宫博物院

故宫博物院位于北京市中心，是中国明清两代的皇家宫殿，旧称紫禁城。故宫占地面积约72万平方米，建筑面积约15万平方米，是世界上现存规模最大、保存最为完整的木质结构古建筑之一。

开放时间：
- 4月1日-10月31日：8:30-17:00
- 11月1日-3月31日：8:30-16:30
- 周一闭馆（法定节假日除外）

门票价格：
- 旺季（4-10月）：60元
- 淡季（11-3月）：40元
- 学生票半价

交通指南：
地铁：1号线天安门东站、天安门西站
公交：1路、2路、10路、20路等多路公交车

游览建议：
建议游览时间3-4小时，推荐路线：午门→太和殿→中和殿→保和殿→乾清宫→坤宁宫→御花园

注意事项：
1. 需要网上实名预约购票
2. 禁止携带打火机等易燃物品
3. 保持安静，爱护文物
4. 部分区域禁止拍照""")
    
    # 创建测试CSV文件
    test_csv = test_docs_dir / "价格信息.csv"
    with open(test_csv, 'w', encoding='utf-8') as f:
        f.write("""票种,价格,优惠政策,适用人群
成人票,60元,无,18-59岁成人
学生票,30元,半价优惠,在校学生
老人票,30元,半价优惠,60岁以上老人
儿童票,免费,身高1.2米以下免票,儿童
年票,300元,全年无限次,所有人群""")
    
    print(f"✅ 测试文档创建完成: {test_docs_dir}")
    
    # 4. 测试不同格式的转换
    formats_to_test = [
        ('summary', '内容摘要'),
        ('attraction_standard', '景区标准信息'),
        ('travel_guide', '旅游攻略'),
        ('marketing_copy', '营销文案'),
        ('structured_data', '结构化数据')
    ]
    
    results = {}
    
    for format_type, format_name in formats_to_test:
        try:
            print(f"\n🎯 测试转换为 {format_name} 格式...")
            
            result = await document_processor.process_documents(
                sources=test_docs_dir,
                target_format=format_type,
                additional_requirements=f"请重点突出{format_name}的特点"
            )
            
            print(f"✅ {format_name} 转换成功")
            print(f"  - 处理文档数: {result['processing_summary']['total_documents']}")
            print(f"  - 输出长度: {len(result['final_output'])} 字符")
            print(f"  - 质量评分: {result['transformed_content']['quality_score']:.2f}")
            
            # 保存结果
            output_dir = Path("test_output/document_processing")
            output_dir.mkdir(parents=True, exist_ok=True)
            
            with open(output_dir / f"{format_type}_result.txt", 'w', encoding='utf-8') as f:
                f.write(result['final_output'])
            
            with open(output_dir / f"{format_type}_full.json", 'w', encoding='utf-8') as f:
                json.dump(result, f, ensure_ascii=False, indent=2, default=str)
            
            results[format_type] = result
            
        except Exception as e:
            print(f"❌ {format_name} 转换失败: {e}")
            results[format_type] = {'error': str(e)}
    
    print(f"\n📁 所有结果已保存至: test_output/document_processing/")
    print(f"✅ 完整流水线测试完成，处理了 {len(formats_to_test)} 种格式")
    
    return results


async def test_individual_components():
    """测试各个组件的独立功能"""
    
    print("\n🔧 独立组件功能测试")
    print("=" * 50)
    
    config = create_default_config()
    pipeline = create_document_pipeline(config)
    
    # 测试文本提取器
    print("\n📥 测试文本提取器...")
    text_extractor = pipeline["text_extractor"]
    
    # 创建简单测试文件
    test_file = Path("test_simple.txt")
    with open(test_file, 'w', encoding='utf-8') as f:
        f.write("这是一个简单的测试文档。\n包含一些基本信息用于测试提取功能。")
    
    try:
        extracted_doc = text_extractor.extract_from_file(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.extraction_method}")
    except Exception as e:
        print(f"❌ 文本提取失败: {e}")
    finally:
        test_file.unlink(missing_ok=True)
    
    # 测试内容整合器
    print("\n🔗 测试内容整合器...")
    content_integrator = pipeline["content_integrator"]
    
    # 创建模拟文档
    from travel_algorithms.document_processing import ExtractedDocument
    
    mock_docs = [
        ExtractedDocument(
            filename="doc1.txt",
            file_type="Plain Text",
            content="北京故宫是明清两代的皇家宫殿，具有重要的历史价值。",
            metadata={},
            extracted_at=datetime.now(),
            file_size=100
        ),
        ExtractedDocument(
            filename="doc2.txt", 
            file_type="Plain Text",
            content="故宫门票价格：旺季60元，淡季40元。开放时间每日8:30-17:00。",
            metadata={},
            extracted_at=datetime.now(),
            file_size=80
        )
    ]
    
    try:
        integrated_content = content_integrator.integrate_documents(mock_docs)
        print(f"✅ 内容整合成功:")
        print(f"  - 文档数量: {integrated_content.document_count}")
        print(f"  - 总内容长度: {integrated_content.total_content_length}")
        print(f"  - 关键主题: {integrated_content.key_topics}")
        print(f"  - 文档类型: {integrated_content.document_types}")
    except Exception as e:
        print(f"❌ 内容整合失败: {e}")
    
    # 测试内容转换器
    print("\n🔄 测试内容转换器...")
    content_transformer = pipeline["content_transformer"]
    
    try:
        if 'integrated_content' in locals():
            transformed_content = await content_transformer.transform_content(
                integrated_content=integrated_content,
                format_type='summary'
            )
            print(f"✅ 内容转换成功:")
            print(f"  - 转换格式: {transformed_content.format_type}")
            print(f"  - 输出长度: {len(transformed_content.transformed_text)}")
            print(f"  - 质量评分: {transformed_content.quality_score:.2f}")
            print(f"  - 转换预览: {transformed_content.transformed_text[:100]}...")
    except Exception as e:
        print(f"❌ 内容转换失败: {e}")
    
    print("\n✅ 独立组件测试完成")


def test_configuration():
    """测试配置功能"""
    
    print("\n⚙️ 配置功能测试")
    print("=" * 50)
    
    config = create_default_config()
    
    # 显示文档处理配置
    doc_config = config.document_processing
    print(f"📄 文档处理配置:")
    print(f"  - 最大文件大小: {doc_config.max_file_size / (1024*1024):.1f} MB")
    print(f"  - 最大内容长度: {doc_config.max_content_length:,} 字符")
    print(f"  - 最大文档数: {doc_config.max_documents}")
    print(f"  - 最大主题数: {doc_config.max_topics}")
    print(f"  - 启用内容整合: {doc_config.enable_content_integration}")
    
    # 显示可用组件
    pipeline = create_document_pipeline(config)
    print(f"\n🧩 可用组件:")
    for name, component in pipeline.items():
        if hasattr(component, '__class__'):
            print(f"  - {name}: {component.__class__.__name__}")
    
    print("\n✅ 配置测试完成")


async def main():
    """主测试函数"""
    
    print("🚀 文档处理系统全面测试")
    print("📖 测试重构后的文档处理功能")
    print("\n包含的功能:")
    print("  ✨ 多格式文档提取 (PDF, Word, Excel, TXT, CSV, JSON, XML, HTML)")
    print("  ✨ 智能内容整合和主题提取")
    print("  ✨ AI驱动的格式转换")
    print("  ✨ 质量评分和元数据跟踪")
    print("  ✨ 批量处理和流水线管理")
    print("\n" + "=" * 60)
    
    # 配置测试
    test_configuration()
    
    # 独立组件测试
    await test_individual_components()
    
    # 完整流水线测试
    await test_complete_pipeline()
    
    print("\n" + "=" * 60)
    print("🎊 所有测试完成！")
    print("\n📁 生成的文件:")
    print("  - test_documents/ - 测试文档目录")
    print("  - test_output/document_processing/ - 处理结果")
    print("📖 查看生成的文件了解处理效果")


if __name__ == "__main__":
    asyncio.run(main()) 