// Copyright 2017 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 "garnet/bin/network_time/timezone.h"
#include "lib/fsl/syslogger/init.h"
#include "lib/fxl/command_line.h"
#include "lib/syslog/cpp/logger.h"
#include "zircon/process.h"
#include "zircon/processargs.h"
#include "zircon/syscalls.h"

int main(int argc, char** argv) {
  // We need to close PA_DIRECTORY_REQUEST otherwise clients that expect us to
  // offer services won't know that we've started and are not going to offer
  // any services.
  //
  // TODO(CP-128): Explicitly doing this on long-running components should not
  // be required.
  zx_handle_close(zx_take_startup_handle(PA_DIRECTORY_REQUEST));

  auto command_line = fxl::CommandLineFromArgcArgv(argc, argv);
  if (fsl::InitLoggerFromCommandLine(command_line, {"network_time"}) != ZX_OK) {
    return 1;
  }

  const std::string config_path = command_line.GetOptionValueWithDefault(
      "config", "/pkg/data/roughtime-servers.json");
  FX_LOGS(INFO) << "Opening client config from " << config_path;

  time_server::Timezone service(config_path);
  bool success = service.Run();

  return success ? EXIT_SUCCESS : EXIT_FAILURE;
}