"""
插件接口规范示例
此文件定义了插件应遵循的接口规范
"""

from plugins.plugin_manager import BasePlugin

class ExamplePlugin(BasePlugin):
    """
    插件接口规范示例
    所有插件都应该继承BasePlugin类并实现以下方法
    """
    
    def __init__(self, plugin_manager, name):
        super().__init__(plugin_manager, name)
        # 设置插件配置
        self.config = {
            "version": "1.0.0",
            "author": "Your Name",
            "description": "插件功能描述"
        }
        
    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}")
        # 在这里执行插件启用逻辑
        # 例如注册事件处理器:
        # 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}")
        # 在这里执行插件禁用逻辑
        # 例如移除事件处理器:
        # self.plugin_manager.world.ignore("f1")
        return True
        
    def finalize(self):
        """
        清理插件资源
        在插件卸载时调用，用于执行最终清理工作
        """
        print(f"清理插件资源: {self.name}")
        # 在这里执行最终清理逻辑
        
    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", "Base plugin class")
        })
        return info

# 插件开发步骤说明:
# 1. 在plugins/user/目录下创建插件目录，如my_plugin
# 2. 在插件目录中创建plugin.py文件
# 3. 在plugin.py中实现Plugin类，继承BasePlugin
# 4. 实现必要的方法（initialize, enable, disable, finalize）
# 5. 在MyWorld中通过plugin_manager加载和启用插件