class RubyLLM::MCP::ResourceTemplate

def apply_template(uri, arguments)

def apply_template(uri, arguments)
  uri.gsub(/\{(\w+)\}/) do
    arguments[::Regexp.last_match(1).to_s] ||
      arguments[::Regexp.last_match(1).to_sym] ||
      "{#{::Regexp.last_match(1)}}"
  end
end

def complete(argument, value, context: nil)

def complete(argument, value, context: nil)
  if @coordinator.capabilities.completion?
    result = @coordinator.completion_resource(uri: @uri, argument: argument, value: value, context: context)
    result.raise_error! if result.error?
    response = result.value["completion"]
    Completion.new(argument: argument, values: response["values"], total: response["total"],
                   has_more: response["hasMore"])
  else
    message = "Completion is not available for this MCP server"
    raise Errors::Capabilities::CompletionNotAvailable.new(message: message)
  end
end

def content_type

def content_type
  if @content.key?("type")
    @content["type"]
  else
    "text"
  end
end

def fetch_resource(arguments: {})

def fetch_resource(arguments: {})
  uri = apply_template(@uri, arguments)
  result = read_response(uri)
  content_response = result.value.dig("contents", 0)
  Resource.new(coordinator, {
                 "uri" => uri,
                 "name" => "#{@name} (#{uri})",
                 "description" => @description,
                 "mimeType" => @mime_type,
                 "content_response" => content_response
               })
end

def fetch_uri_content(uri)

def fetch_uri_content(uri)
  response = HTTPX.get(uri)
  { "result" => { "contents" => [{ "text" => response.body }] } }
end

def initialize(coordinator, resource)

def initialize(coordinator, resource)
  @coordinator = coordinator
  @uri = resource["uriTemplate"]
  @name = resource["name"]
  @description = resource["description"]
  @mime_type = resource["mimeType"]
end

def read_response(uri)

def read_response(uri)
  parsed = URI.parse(uri)
  case parsed.scheme
  when "http", "https"
    fetch_uri_content(uri)
  else # file:// or git://
    @coordinator.resource_read(uri: uri)
  end
end

def to_content(arguments: {})

def to_content(arguments: {})
  fetch_resource(arguments: arguments).to_content
end