class BgpSessionCompatibilityAnswerer extends Answerer {

  @Nonnull
  @VisibleForTesting
  static Row getActivePeerRow(
      BgpPeerConfigId activeId,
      BgpActivePeerConfig activePeer,
      Map<Ip, Map<String, Set<String>>> ipVrfOwners,
      ValueGraph<BgpPeerConfigId, BgpSessionProperties> configuredTopology) {
    // Determine peer's session type and status. If compatible, find its unique remote match
    SessionType type = getSessionType(activePeer);
    ConfiguredSessionStatus status =
        getConfiguredStatus(activeId, activePeer, type, ipVrfOwners, configuredTopology);
    Node remoteNode = null;
    Long localAs = activePeer.getLocalAs();
    String remoteAs = activePeer.getRemoteAsns().toString();
    Set<Type> addressFamilies = ImmutableSet.of();
    if (status == UNIQUE_MATCH) {
      BgpPeerConfigId remoteId = configuredTopology.adjacentNodes(activeId).iterator().next();
      String remoteNodeName = remoteId.getHostname();
      remoteNode = new Node(remoteNodeName);
      Optional<BgpSessionProperties> sessionProps =
          configuredTopology.edgeValue(activeId, remoteId);
      if (sessionProps.isPresent()) {
        remoteAs = Long.toString(sessionProps.get().getHeadAs());
        localAs = sessionProps.get().getTailAs();
        addressFamilies = sessionProps.get().getAddressFamilies();
      }
    }
    return Row.builder(METADATA_MAP)
        .put(COL_CONFIGURED_STATUS, status)
        .put(COL_ADDRESS_FAMILIES, addressFamilies)
        .put(COL_LOCAL_INTERFACE, null)
        .put(COL_LOCAL_AS, localAs)
        .put(COL_LOCAL_IP, activePeer.getLocalIp())
        .put(COL_NODE, new Node(activeId.getHostname()))
        .put(COL_REMOTE_AS, remoteAs)
        .put(COL_REMOTE_NODE, remoteNode)
        .put(COL_REMOTE_INTERFACE, null)
        .put(COL_REMOTE_IP, new SelfDescribingObject(Schema.IP, activePeer.getPeerAddress()))
        .put(COL_SESSION_TYPE, getSessionType(activePeer))
        .put(COL_VRF, activeId.getVrfName())
        .build();
  }

  public  BgpSessionCompatibilityAnswerer(Question question, IBatfish batfish);

}