// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include <fidl/examples/echo/cpp/fidl.h>
#include <lib/fdio/directory.h>
#include <src/lib/files/path.h>

#include <iostream>
#include <string>

#include "lib/fidl/cpp/string.h"

int main(int argc, const char** argv) {
  if (argc < 2) {
    printf(
        "Usage: %s <path> <strings...>\nOpens <path> as an echo server and "
        "sends <strings>\n",
        argv[0]);
    return -1;
  }

  fidl::examples::echo::EchoSyncPtr echo;

  std::string file_name = files::AbsolutePath(argv[1]);
  zx_status_t status =
      fdio_service_connect(file_name.c_str(), echo.NewRequest().TakeChannel().release());
  if (status != ZX_OK) {
    printf("Failed to open %s, %d\n", file_name.c_str(), status);
    return -1;
  }

  for (int i = 2; i < argc; i++) {
    fidl::StringPtr result;
    echo->EchoString(argv[i], &result);
    printf("Response: %s\n", result->c_str());
  }

  printf("Done sending strings, close this component to disconnect.\n");
  sleep(1000000000);

  return 0;
}
