"""
流体动力学插件
此文件定义了插件的主类和基本接口
"""

from plugins.plugin_manager import BasePlugin
from .core.fluid_world import FluidWorld

class Plugin(BasePlugin):
    """
    流体动力学插件主类
    """
    
    def __init__(self, plugin_manager, name):
        super().__init__(plugin_manager, name)
        # 设置插件配置
        self.config = {
            "version": "1.0.0",
            "author": "Your Name",
            "description": "基于物理的流体动力学模拟插件"
        }
        
        # 流体世界实例
        self.fluid_world = None
        
    def initialize(self) -> bool:
        """
        初始化插件
        在插件加载时调用，用于执行一次性设置
        返回True表示初始化成功，False表示失败
        """
        print(f"初始化流体动力学插件: {self.name}")
        # 在这里执行插件初始化逻辑
        return True
        
    def enable(self) -> bool:
        """
        启用插件
        在插件启用时调用，用于注册事件处理器、创建GUI元素等
        返回True表示启用成功，False表示失败
        """
        if not super().enable():
            return False
            
        print(f"启用流体动力学插件: {self.name}")
        # 创建流体世界实例
        try:
            self.fluid_world = FluidWorld(self.plugin_manager.world)
            print("流体世界创建成功")
        except Exception as e:
            print(f"流体世界创建失败: {e}")
            return False
        
        # 在这里执行插件启用逻辑
        # 例如注册事件处理器:
        # self.plugin_manager.world.accept("f1", self.on_f1_pressed)
        return True
        
    def disable(self) -> bool:
        """
        禁用插件
        在插件禁用时调用，用于清理资源、移除事件处理器等
        返回True表示禁用成功，False表示失败
        """
        if not super().disable():
            return False
            
        print(f"禁用流体动力学插件: {self.name}")
        # 清理流体世界资源
        if self.fluid_world:
            self.fluid_world.cleanup()
            
        # 在这里执行插件禁用逻辑
        # 例如移除事件处理器:
        # self.plugin_manager.world.ignore("f1")
        return True
        
    def finalize(self):
        """
        清理插件资源
        在插件卸载时调用，用于执行最终清理工作
        """
        print(f"清理流体动力学插件资源: {self.name}")
        # 在这里执行最终清理逻辑
        if self.fluid_world:
            self.fluid_world.cleanup()
        
    def get_info(self) -> dict:
        """
        获取插件信息
        返回包含插件信息的字典
        """
        info = super().get_info()
        info.update({
            "version": self.config.get("version", "1.0.0"),
            "author": self.config.get("author", "Unknown"),
            "description": self.config.get("description", "Fluid dynamics plugin")
        })
        return info