// 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 "src/developer/bugreport/command_line_options.h"

#include "src/lib/fxl/command_line.h"
#include "src/lib/fxl/strings/substitute.h"

namespace fuchsia {
namespace bugreport {
namespace {

constexpr char kUsage[] = R"($0

    Dumps in stdout a JSON file containing the feedback data (annotations and
    attachments) collected from fuchsia.feedback.DataProvider.

Usage:

  $0 [--minimal]

Arguments:

    --minimal    Restricts the attachments to the Inspect data only (no logs,
                 no build snapshot, etc.). Annotations are preserved.

)";

}  // namespace

Mode ParseModeFromArgcArgv(int argc, const char* const* argv) {
  auto command_line = fxl::CommandLineFromArgcArgv(argc, argv);
  auto& pos_args = command_line.positional_args();
  if (command_line.HasOption("help") ||
      (pos_args.size() == 1u && pos_args[0] == "help")) {
    printf("%s\n", fxl::Substitute(kUsage, command_line.argv0()).c_str());
    return Mode::HELP;
  }

  if (command_line.HasOption("minimal")) {
    return Mode::MINIMAL;
  } else if (!command_line.options().empty() || !pos_args.empty()) {
    fprintf(stderr, "Unexpected option. Usage: %s\n",
            fxl::Substitute(kUsage, command_line.argv0()).c_str());
    return Mode::FAILURE;
  }

  return Mode::DEFAULT;
}

}  // namespace bugreport
}  // namespace fuchsia
