"""
状态机插件
提供完整的有限状态机功能用于管理对象状态
包含状态管理、转换系统、上下文管理等完整功能
"""

from plugins.plugin_manager import BasePlugin
from typing import Dict, Optional, Any

class Plugin(BasePlugin):
    """
    状态机插件
    提供完整的有限状态机功能用于管理对象状态
    """
    
    def __init__(self, plugin_manager, name):
        super().__init__(plugin_manager, name)
        self.config = {
            "version": "1.0.0",
            "author": "EG Team",
            "description": "状态机插件，用于管理对象状态，包含完整的状态管理、转换系统和上下文管理"
        }
        self.state_machines = {}
        self.machine_manager = None
        self.is_initialized = False
        
    def initialize(self) -> bool:
        """
        初始化插件
        """
        if self.is_initialized:
            return True
            
        try:
            # 导入核心模块
            from plugins.user.state_machine.core.state_machine import StateMachineManager
            
            # 创建管理器实例
            self.machine_manager = StateMachineManager()
            
            print(f"初始化状态机插件: {self.name}")
            self.is_initialized = True
            return True
            
        except Exception as e:
            print(f"状态机插件初始化失败: {e}")
            import traceback
            traceback.print_exc()
            return False
        
    def enable(self) -> bool:
        """
        启用插件
        """
        if not super().enable():
            return False
            
        if not self.is_initialized:
            if not self.initialize():
                return False
                
        print(f"启用状态机插件: {self.name}")
        return True
        
    def disable(self) -> bool:
        """
        禁用插件
        """
        if not super().disable():
            return False
            
        # 停止所有激活的状态机
        if self.machine_manager:
            self.machine_manager.active_machines.clear()
            
        print(f"禁用状态机插件: {self.name}")
        return True
        
    def finalize(self) -> None:
        """
        清理插件资源
        """
        print(f"清理状态机插件资源: {self.name}")
        
        try:
            # 停止所有激活的状态机
            if self.machine_manager:
                # 停止所有状态机
                for machine in self.machine_manager.state_machines.values():
                    if machine.is_running:
                        machine.stop()
                # 清空激活列表
                self.machine_manager.active_machines.clear()
                
            # 清理资源
            self.state_machines.clear()
            self.machine_manager = None
            self.is_initialized = False
            
            print(f"状态机插件资源清理完成: {self.name}")
            
        except Exception as e:
            print(f"清理状态机插件资源失败: {e}")
            import traceback
            traceback.print_exc()
        
    def create_state_machine(self, name: str) -> Optional['StateMachine']:
        """
        创建状态机
        """
        try:
            from plugins.user.state_machine.core.state_machine import StateMachine
            machine = StateMachine(name)
            self.state_machines[name] = machine
            
            # 添加到管理器
            if self.machine_manager:
                self.machine_manager.add_machine(name, machine)
                
            return machine
        except Exception as e:
            print(f"创建状态机失败: {e}")
            return None
        
    def get_state_machine(self, name: str) -> Optional['StateMachine']:
        """
        获取状态机实例
        """
        return self.state_machines.get(name)
        
    def remove_state_machine(self, name: str) -> bool:
        """
        移除状态机
        """
        if name in self.state_machines:
            # 从管理器移除
            if self.machine_manager:
                self.machine_manager.remove_machine(name)
            del self.state_machines[name]
            return True
        return False
        
    def get_machine_manager(self) -> Optional['StateMachineManager']:
        """
        获取状态机管理器
        """
        return self.machine_manager
        
    def update_all_machines(self) -> Dict[str, bool]:
        """
        更新所有激活的状态机
        """
        if self.machine_manager:
            return self.machine_manager.update_all()
        return {}
            
    def get_machine_statistics(self, name: str) -> Optional[Dict[str, Any]]:
        """
        获取状态机统计信息
        """
        if self.machine_manager:
            return self.machine_manager.get_machine_stats(name)
        return None
        
    def get_all_statistics(self) -> Dict[str, Dict[str, Any]]:
        """
        获取所有状态机统计信息
        """
        if self.machine_manager:
            return self.machine_manager.get_all_stats()
        return {}
        
    def start_all_machines(self) -> Dict[str, bool]:
        """
        启动所有状态机
        """
        if self.machine_manager:
            return self.machine_manager.start_all()
        return {}
        
    def stop_all_machines(self) -> Dict[str, bool]:
        """
        停止所有状态机
        """
        if self.machine_manager:
            return self.machine_manager.stop_all()
        return {}

# 兼容性接口
Plugin = Plugin