"""Tools manager for maintaining singleton instances of tools."""

from mcp_server_code_assist.tools.dir_tools import DirTools
from mcp_server_code_assist.tools.file_tools import FileTools
from mcp_server_code_assist.tools.git_tools import GitTools

_file_tools: FileTools | None = None
_dir_tools: DirTools | None = None
_git_tools: GitTools | None = None


def get_file_tools(allowed_paths: list[str]) -> FileTools:
    """Get or create FileTools instance with given allowed paths.

    Args:
        allowed_paths: List of paths that tools can operate on

    Returns:
        FileTools instance with updated paths
    """
    global _file_tools
    if not _file_tools or not all(path in _file_tools.allowed_paths for path in allowed_paths):
        _file_tools = FileTools(allowed_paths=allowed_paths)
    return _file_tools


def get_dir_tools(allowed_paths: list[str]) -> DirTools:
    """Get or create DirTools instance with given allowed paths.

    Args:
        allowed_paths: List of paths that tools can operate on

    Returns:
        DirTools instance with updated paths
    """
    global _dir_tools
    if not _dir_tools or not all(path in _dir_tools.allowed_paths for path in allowed_paths):
        _dir_tools = DirTools(allowed_paths=allowed_paths)
    return _dir_tools


def get_git_tools(allowed_paths: list[str]) -> GitTools:
    """Get or create GitTools instance with given allowed paths.

    Args:
        allowed_paths: List of paths that tools can operate on

    Returns:
        GitTools instance with updated paths
    """
    global _git_tools
    if not _git_tools or not all(path in _git_tools.allowed_paths for path in allowed_paths):
        _git_tools = GitTools(allowed_paths=allowed_paths)
    return _git_tools
