class Client extends AbstractClient implements IClient {

  static Multimap<String, String> loadQuestionsFromDir(
      String questionsPathStr, @Nullable BatfishLogger logger) {
    Path questionsPath = Paths.get(questionsPathStr);
    SortedSet<Path> jsonQuestionFiles = new TreeSet<>();
    try {
      Files.walkFileTree(
          questionsPath,
          EnumSet.of(FOLLOW_LINKS),
          1,
          new SimpleFileVisitor<Path>() {
            @Override
            public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
              String filename = file.getFileName().toString();
              if (filename.endsWith(".json")) {
                jsonQuestionFiles.add(file);
              }
              return FileVisitResult.CONTINUE;
            }
          });
    } catch (IOException e) {
      throw new BatfishException("Failed to visit questions dir", e);
    }
    Multimap<String, String> loadedQuestions = HashMultimap.create();
    for (Path jsonQuestionFile : jsonQuestionFiles) {
      try {
        JSONObject questionJSON = loadQuestionFromFile(jsonQuestionFile);
        loadedQuestions.put(
            getQuestionName(questionJSON, jsonQuestionFile.toString()), questionJSON.toString());
      } catch (Exception e) {
        if (logger != null) {
          logger.errorf("Could not load template from %s: %s", jsonQuestionFile, e);
        }
      }
    }
    return loadedQuestions;
  }

  public  Client(Settings settings);
  public  Client(String[] args);

}