class RNFService
  include Dry::Monads[:result]

  def call(rnf_id:)
    result = API::Client.new.(url: "#{url}/#{rnf_id}", schema:)
    case result
    in Success(body:)
      Success(body)
    in Failure(code:, reason:) if code.in?(401..403)
      Failure(API::Client::Error[:unauthorized, code, false, reason])
    else
      result
    end
  end

  private

  def schema
    JSONSchemer.schema(Rails.root.join('app/schemas/rnf.json'))
  end

  def url
    "#{API_RNF_URL}/api/foundations"
  end
end