#!/usr/bin/env python3
"""
脚本管理界面测试

这个脚本测试新添加的脚本管理界面功能：
1. 脚本菜单
2. 脚本管理面板
3. 脚本挂载和卸载
4. 属性面板中的脚本信息显示
"""

import sys
import os

# 确保能导入项目模块
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))

from main import MyWorld
from ui.main_window import setup_main_window
from panda3d.core import *

def test_script_management():
    """测试脚本管理功能"""
    print("=== 脚本管理界面测试 ===")
    
    # 创建世界对象
    world = MyWorld()
    
    # 设置主窗口
    app, main_window = setup_main_window(world)
    
    # 创建一些测试对象
    print("\n1. 创建测试对象...")
    
    # 创建一个立方体
    cube = world.loader.loadModel("models/environment")
    if cube:
        cube.reparentTo(world.render)
        cube.setPos(0, 10, 0)
        cube.setScale(0.5)
        cube.setName("测试立方体")
        world.models.append(cube)
        print("✓ 创建立方体")
    
    # 更新场景树
    world.updateSceneTree()
    
    print("\n2. 脚本系统状态:")
    print(f"✓ 脚本系统已启动: {world.script_manager.engine.update_task is not None}")
    print(f"✓ 热重载已启用: {world.script_manager.hot_reload_enabled}")
    print(f"✓ 可用脚本数量: {len(world.getAvailableScripts())}")
    
    print("\n3. 测试脚本创建...")
    # 创建一些测试脚本
    test_scripts = [
        ("TestRotator", "basic"),
        ("TestMover", "movement"),
        ("TestScaler", "basic")
    ]
    
    for script_name, template in test_scripts:
        try:
            success = world.createScript(script_name, template)
            if success:
                print(f"✓ 创建脚本: {script_name}")
            else:
                print(f"✗ 创建脚本失败: {script_name}")
        except Exception as e:
            print(f"✗ 创建脚本出错 {script_name}: {e}")
    
    print("\n4. 加载所有脚本...")
    try:
        scripts_loaded = world.loadAllScripts()
        print(f"✓ 成功加载 {len(scripts_loaded)} 个脚本")
        for script_name in scripts_loaded:
            print(f"  - {script_name}")
    except Exception as e:
        print(f"✗ 加载脚本失败: {e}")
    
    print("\n5. 测试脚本挂载...")
    if cube and world.getAvailableScripts():
        script_name = world.getAvailableScripts()[0]
        try:
            success = world.addScript(cube, script_name)
            if success:
                print(f"✓ 成功挂载脚本 {script_name} 到立方体")
                
                # 获取挂载的脚本
                scripts = world.getScripts(cube)
                print(f"✓ 立方体上的脚本数量: {len(scripts)}")
            else:
                print(f"✗ 挂载脚本失败")
        except Exception as e:
            print(f"✗ 挂载脚本出错: {e}")
    
    print("\n6. 界面使用说明:")
    print("─" * 50)
    print("• 使用菜单栏 -> 脚本 来访问脚本功能")
    print("• 在右侧停靠窗口中查看'脚本管理'标签页")
    print("• 选择场景中的对象查看其脚本属性")
    print("• 使用脚本面板挂载/卸载脚本")
    print("• 双击脚本名称可以（将来）打开外部编辑器")
    print("• 热重载功能会自动检测脚本文件变化")
    print("─" * 50)
    
    print("\n✓ 脚本管理界面测试完成！")
    print("现在可以通过GUI界面管理脚本了。")
    
    # 启动应用
    return app.exec_()

if __name__ == "__main__":
    sys.exit(test_script_management()) 