from .base_executor import BaseExecutor, ExecutorResult
from .claude_executor import ClaudeExecutor
from .codex_executor import CodexExecutor
from .openhands_executor import OpenHandsExecutor
from .gemini_executor import GeminiExecutor

EXECUTOR_REGISTRY = {
    "claude": ClaudeExecutor,
    "codex": CodexExecutor,
    "openhands": OpenHandsExecutor,
    "gemini": GeminiExecutor,
}


def get_executor(name: str, repo_path: str) -> BaseExecutor:
    cls = EXECUTOR_REGISTRY.get(name)
    if not cls:
        raise ValueError(f"Unknown executor: {name}. Available: {list(EXECUTOR_REGISTRY.keys())}")
    return cls(repo_path)


__all__ = [
    "BaseExecutor",
    "ExecutorResult",
    "ClaudeExecutor",
    "CodexExecutor",
    "OpenHandsExecutor",
    "GeminiExecutor",
    "EXECUTOR_REGISTRY",
    "get_executor",
]
