lib/bb/mcp/resources.ex

# SPDX-FileCopyrightText: 2026 James Harton
#
# SPDX-License-Identifier: Apache-2.0

defmodule BB.MCP.Resources do
  @moduledoc """
  Shared helpers for the resource component modules under
  `BB.MCP.Resources.*`.
  """

  alias Anubis.MCP.Error
  alias BB.MCP.Robots
  alias BB.MCP.Tools

  @doc """
  Resolve a `robot` URI template variable to a robot module.

  Returns `{:ok, module}` or `{:error, Anubis.MCP.Error.t()}`.
  """
  @spec fetch_robot(map()) :: {:ok, module()} | {:error, struct()}
  def fetch_robot(%{"params" => %{"robot" => name}}) when is_binary(name) do
    case Robots.fetch(Tools.robots(), name) do
      {:ok, module} ->
        {:ok, module}

      {:error, :unknown_robot} ->
        {:error,
         Error.resource(:not_found, %{
           message: "unknown robot #{inspect(name)}; available: #{Tools.available_names()}"
         })}
    end
  end

  def fetch_robot(_),
    do:
      {:error,
       Error.resource(:not_found, %{
         message: "missing robot URI template variable"
       })}
end