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

"""
Vibrant海报生成测试脚本
测试重构后的海报生成功能，包括fabric.js输出和透明底图支持
"""

import asyncio
import json
from pathlib import Path
from PIL import Image

from travel_algorithms import create_poster_pipeline, create_default_config


async def test_vibrant_poster():
    """测试Vibrant海报生成功能"""
    
    print("🎨 开始测试Vibrant海报生成功能...")
    
    # 1. 创建配置和流水线
    print("\n📋 创建配置和流水线...")
    config = create_default_config(
        resource_base_directory="../resource",  # 假设提示词在这里
        ai_model="qwq-plus"
    )
    
    pipeline = create_poster_pipeline(config)
    poster_generator = pipeline["poster_generator"]
    text_generator = pipeline["text_generator"]
    
    print("✅ 流水线创建成功")
    
    # 2. 测试Vibrant内容生成
    print("\n📝 测试Vibrant内容生成...")
    
    scenic_info = """
    正佳极地海洋世界
    - 位于广州天河正佳广场
    - 拥有各种海洋动物表演
    - 企鹅、白鲸、海豚等明星动物
    - 夜场特色项目更加浪漫
    """
    
    product_info = """
    夜场门票套餐
    - 价格：199元
    - 包含：夜场门票1张
    - 有效期：至2025年6月2日
    - 特色：动物表演全部免费观看
    - 适合：情侣约会、家庭出游
    """
    
    tweet_info = """
    都说海洋馆是约会圣地！那锦峰夜场将是绝杀！
    浪漫的夜晚，神秘的海底世界，还有什么比这更浪漫的吗？
    """
    
    try:
        vibrant_content = await text_generator.generate_vibrant_content(
            scenic_info=scenic_info,
            product_info=product_info,
            tweet_info=tweet_info
        )
        
        print("✅ 内容生成成功:")
        print(json.dumps(vibrant_content, ensure_ascii=False, indent=2))
        
    except Exception as e:
        print(f"❌ 内容生成失败: {e}")
        # 使用默认内容继续测试
        vibrant_content = {
            "title": "正佳极地海洋世界",
            "slogan": "都说海洋馆是约会圣地！那锦峰夜场将是绝杀！",
            "price": "199",
            "ticket_type": "夜场票",
            "content_button": "套餐内容",
            "content_items": [
                "正佳极地海洋世界夜场票1张",
                "有效期至2025.06.02",
                "多种动物表演全部免费"
            ],
            "remarks": [
                "工作日可直接入园",
                "周末请提前1天预约"
            ],
            "tag": "#520特惠",
            "pagination": ""
        }
        print("使用默认内容继续测试...")
    
    # 3. 测试透明底图生成
    print("\n🖼️  测试透明底图海报生成...")
    
    try:
        transparent_poster = await poster_generator.generate_poster(
            content=vibrant_content,
            images=[],  # 不提供图像
            template_name="vibrant",
            use_transparent_bg=True,
            output_format="image"
        )
        
        if isinstance(transparent_poster, Image.Image):
            # 保存透明底图海报
            output_path = Path("test_output/vibrant_transparent.png")
            output_path.parent.mkdir(exist_ok=True)
            transparent_poster.save(output_path)
            print(f"✅ 透明底图海报生成成功，保存至: {output_path}")
        else:
            print("❌ 返回的不是Image对象")
            
    except Exception as e:
        print(f"❌ 透明底图海报生成失败: {e}")
    
    # 4. 测试Fabric.js JSON输出
    print("\n🔧 测试Fabric.js JSON输出...")
    
    try:
        # 创建一个测试图像
        test_image = Image.new("RGB", (900, 1200), color=(100, 150, 200))
        
        fabric_json = await poster_generator.generate_poster(
            content=vibrant_content,
            images=[test_image],
            template_name="vibrant",
            output_format="fabric_json"
        )
        
        if isinstance(fabric_json, dict):
            # 保存Fabric.js JSON
            output_path = Path("test_output/vibrant_fabric.json")
            output_path.parent.mkdir(exist_ok=True)
            with open(output_path, 'w', encoding='utf-8') as f:
                json.dump(fabric_json, f, ensure_ascii=False, indent=2)
            print(f"✅ Fabric.js JSON生成成功，保存至: {output_path}")
            print(f"包含 {len(fabric_json.get('objects', []))} 个对象")
        else:
            print("❌ 返回的不是字典对象")
            
    except Exception as e:
        print(f"❌ Fabric.js JSON生成失败: {e}")
    
    # 5. 测试分层数据输出
    print("\n📚 测试分层数据输出...")
    
    try:
        test_image = Image.new("RGB", (900, 1200), color=(100, 150, 200))
        
        layer_data = await poster_generator.generate_poster(
            content=vibrant_content,
            images=[test_image],
            template_name="vibrant",
            output_format="layers"
        )
        
        if isinstance(layer_data, list):
            print(f"✅ 分层数据生成成功，包含 {len(layer_data)} 个图层:")
            for i, layer in enumerate(layer_data):
                print(f"  - 图层 {i+1}: {layer.get('name', 'Unknown')} ({layer.get('type', 'Unknown')})")
        else:
            print("❌ 返回的不是列表对象")
            
    except Exception as e:
        print(f"❌ 分层数据生成失败: {e}")
    
    # 6. 测试常规图像海报生成
    print("\n🎯 测试常规图像海报生成...")
    
    try:
        test_image = Image.new("RGB", (900, 1200), color=(50, 100, 150))
        
        regular_poster = await poster_generator.generate_poster(
            content=vibrant_content,
            images=[test_image],
            template_name="vibrant",
            glass_intensity=1.8,
            output_format="image"
        )
        
        if isinstance(regular_poster, Image.Image):
            # 保存常规海报
            output_path = Path("test_output/vibrant_regular.png")
            output_path.parent.mkdir(exist_ok=True)
            regular_poster.save(output_path)
            print(f"✅ 常规海报生成成功，保存至: {output_path}")
        else:
            print("❌ 返回的不是Image对象")
            
    except Exception as e:
        print(f"❌ 常规海报生成失败: {e}")
    
    print("\n🎉 Vibrant海报生成测试完成！")


def test_template_manager():
    """测试模板管理器功能"""
    
    print("\n🔧 测试模板管理器...")
    
    config = create_default_config()
    pipeline = create_poster_pipeline(config)
    template_manager = pipeline["template_manager"]
    
    # 测试获取可用模板
    available_templates = template_manager.get_available_templates()
    print(f"✅ 可用模板: {available_templates}")
    
    # 测试获取模板信息
    for template_name in available_templates:
        try:
            template_info = template_manager.get_template_info(template_name)
            print(f"📋 模板 {template_name}:")
            print(f"  - 类名: {template_info.get('class_name')}")
            print(f"  - 支持功能: {template_info.get('supported_features', [])}")
        except Exception as e:
            print(f"❌ 获取模板 {template_name} 信息失败: {e}")


async def main():
    """主测试函数"""
    print("🚀 开始Vibrant海报生成系统测试")
    print("=" * 50)
    
    # 测试模板管理器
    test_template_manager()
    
    # 测试海报生成
    await test_vibrant_poster()
    
    print("\n" + "=" * 50)
    print("🎊 所有测试完成！")


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