"""Skill注册表"""
import re
from typing import Dict, List, Optional, Tuple, Any


class SkillRegistry:
    """Skill注册表 - 管理所有可用的Skills"""

    def __init__(self):
        self.skills: Dict[str, Any] = {}
        self.triggers: List[Tuple[str, str, int, dict]] = []  # (pattern, skill_name, priority, config)

    def register(self, name: str, skill: Any) -> None:
        """注册Skill"""
        self.skills[name] = skill

        # 注册触发器
        if hasattr(skill, 'triggers'):
            for trigger in skill.triggers:
                self.triggers.append((
                    trigger['pattern'],
                    name,
                    trigger.get('priority', 0),
                    trigger.get('match_config', {}),
                ))
            # 按优先级排序
            self.triggers.sort(key=lambda x: x[2], reverse=True)

    def get(self, name: str) -> Optional[Any]:
        """获取Skill"""
        return self.skills.get(name)

    def match(self, query: str) -> Optional[Tuple[str, Any]]:
        """
        匹配查询到对应的Skill

        Returns:
            (skill_name, skill) 或 None
        """
        for pattern, skill_name, priority, config in self.triggers:
            flags = re.IGNORECASE if not config.get('case_sensitive', True) else 0
            if re.search(pattern, query, flags):
                return skill_name, self.skills.get(skill_name)
        return None

    def list_skills(self) -> List[str]:
        """列出所有Skill名称"""
        return list(self.skills.keys())


# 全局注册表实例
_registry = None


def get_registry() -> SkillRegistry:
    """获取全局Skill注册表（单例）"""
    global _registry
    if _registry is None:
        _registry = SkillRegistry()
    return _registry
