"""
Config Loader

Loads and caches tool configurations from YAML files.
"""

import yaml
from pathlib import Path
from typing import Dict, Any, Optional


class ConfigLoader:
    """Tool configuration loader with caching support"""

    def __init__(self, config_dir: Optional[Path] = None):
        if config_dir is None:
            config_dir = Path(__file__).parent
        self.config_dir = Path(config_dir)
        self._cache: Dict[str, Any] = {}

    def load(self, tool_name: str) -> Dict[str, Any]:
        """Load configuration for a specific tool"""
        if tool_name in self._cache:
            return self._cache[tool_name]

        config_file = self.config_dir / f"{tool_name}.yaml"
        if not config_file.exists():
            # Try without .yaml extension
            config_file = self.config_dir / tool_name

        if not config_file.exists():
            return {}

        with open(config_file, encoding="utf-8") as f:
            config = yaml.safe_load(f) or {}

        self._cache[tool_name] = config
        return config

    def reload(self, tool_name: str) -> Dict[str, Any]:
        """Reload configuration for a specific tool"""
        if tool_name in self._cache:
            del self._cache[tool_name]
        return self.load(tool_name)

    def get(self, tool_name: str, key: str, default: Any = None) -> Any:
        """Get a specific configuration value"""
        config = self.load(tool_name)
        return config.get(key, default)

    def clear_cache(self) -> None:
        """Clear the configuration cache"""
        self._cache.clear()

    def load_all(self) -> Dict[str, Dict[str, Any]]:
        """Load all configuration files in the config directory"""
        all_configs = {}
        for config_file in self.config_dir.glob("*.yaml"):
            tool_name = config_file.stem
            all_configs[tool_name] = self.load(tool_name)
        return all_configs
