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

"""
脚本系统快速测试
验证脚本系统的基本功能是否正常工作
"""

import sys
import os
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

def quick_test():
    """快速测试脚本系统"""
    print("=== 脚本系统快速测试 ===\n")
    
    try:
        # 1. 导入主程序
        print("1. 导入主程序...")
        from main import MyWorld
        print("✓ 主程序导入成功")
        
        # 2. 创建世界实例
        print("\n2. 创建世界实例...")
        world = MyWorld()
        print("✓ 世界实例创建成功")
        
        # 3. 检查脚本管理器
        print("\n3. 检查脚本管理器...")
        if hasattr(world, 'script_manager'):
            print("✓ 脚本管理器存在")
            print(f"  - 脚本引擎: {world.script_manager.engine}")
            print(f"  - 脚本加载器: {world.script_manager.loader}")
            print(f"  - 脚本API: {world.script_manager.api}")
        else:
            print("✗ 脚本管理器不存在")
            return False
        
        # 4. 测试脚本目录创建
        print("\n4. 测试脚本目录...")
        scripts_dir = world.script_manager.scripts_directory
        if os.path.exists(scripts_dir):
            print(f"✓ 脚本目录存在: {scripts_dir}")
            
            # 列出目录中的文件
            files = os.listdir(scripts_dir)
            print(f"  - 目录中的文件: {files}")
        else:
            print(f"✗ 脚本目录不存在: {scripts_dir}")
        
        # 5. 测试脚本加载
        print("\n5. 测试脚本加载...")
        world.loadAllScripts()
        available_scripts = world.getAvailableScripts()
        print(f"✓ 可用脚本: {available_scripts}")
        
        # 6. 测试对象创建和脚本挂载
        print("\n6. 测试脚本挂载...")
        test_object = world.render.attachNewNode("TestObject")
        print(f"✓ 创建测试对象: {test_object.getName()}")
        
        if "ExampleScript" in available_scripts:
            script_comp = world.addScript(test_object, "ExampleScript")
            if script_comp:
                print("✓ 脚本挂载成功")
                print(f"  - 脚本类型: {script_comp.script_instance.__class__.__name__}")
                print(f"  - 脚本启用: {script_comp.enabled}")
            else:
                print("✗ 脚本挂载失败")
        else:
            print("! 没有ExampleScript可用于测试")
        
        # 7. 测试脚本系统状态
        print("\n7. 脚本系统状态...")
        engine = world.script_manager.engine
        print(f"  - 脚本引擎运行: {engine.update_task is not None}")
        print(f"  - 脚本组件数量: {len(engine.script_components)}")
        print(f"  - 有脚本的对象数量: {len(world.script_manager.object_scripts)}")
        
        # 8. 测试脚本创建
        print("\n8. 测试脚本创建...")
        new_script_path = world.createScript("test_quick_script", "basic")
        print(f"✓ 创建新脚本: {new_script_path}")
        
        if os.path.exists(new_script_path):
            print("✓ 脚本文件创建成功")
        else:
            print("✗ 脚本文件创建失败")
        
        print("\n=== 快速测试完成 ===")
        print("✓ 脚本系统基本功能正常")
        return True
        
    except Exception as e:
        print(f"\n✗ 测试过程中出现错误: {e}")
        import traceback
        traceback.print_exc()
        return False


def test_script_execution():
    """测试脚本执行"""
    print("\n=== 脚本执行测试 ===")
    
    try:
        from main import MyWorld
        
        world = MyWorld()
        world.loadAllScripts()
        
        # 创建测试对象
        test_obj = world.render.attachNewNode("ExecutionTest")
        test_obj.setPos(0, 10, 0)
        
        # 添加脚本
        available_scripts = world.getAvailableScripts()
        if available_scripts:
            script_name = available_scripts[0]
            script_comp = world.addScript(test_obj, script_name)
            
            if script_comp:
                print(f"✓ 添加脚本: {script_name}")
                
                # 手动触发脚本生命周期
                print("\n模拟脚本执行...")
                
                # Start
                if not script_comp._started:
                    script_comp.start()
                    print("✓ 调用脚本start()方法")
                
                # Update几次
                for i in range(3):
                    script_comp.update(0.016)  # 约60FPS
                    print(f"✓ 调用脚本update()方法 ({i+1}/3)")
                
                # 禁用/启用测试
                script_comp.set_enabled(False)
                print("✓ 禁用脚本")
                
                script_comp.set_enabled(True)
                print("✓ 重新启用脚本")
                
                # 销毁
                script_comp.destroy()
                print("✓ 销毁脚本")
                
                print("\n✓ 脚本执行测试完成")
            else:
                print("✗ 脚本添加失败")
        else:
            print("! 没有可用脚本进行测试")
            
    except Exception as e:
        print(f"✗ 脚本执行测试失败: {e}")
        import traceback
        traceback.print_exc()


if __name__ == "__main__":
    # 运行快速测试
    success = quick_test()
    
    if success:
        # 如果基本测试通过，运行执行测试
        test_script_execution()
    else:
        print("\n基本测试失败，跳过执行测试")
    
    print("\n测试完成！") 