// Copyright 2020 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 <lib/syslog/cpp/macros.h>

#include <cstdlib>

#include "src/developer/forensics/crash_reports/main.h"
#include "src/developer/forensics/exceptions/handler/main.h"
#include "src/developer/forensics/exceptions/main.h"
#include "src/developer/forensics/feedback_data/main.h"
#include "src/developer/forensics/feedback_data/system_log_recorder/main.h"
#include "src/developer/forensics/last_reboot/main.h"

int main(int argc, const char** argv) {
  // For components' main executables, argv[0] is the binary path.
  // For sub-processes, argv[0] is the process name.
  FX_CHECK(argc >= 1);

  const auto argv0 = std::string(argv[0]);
  if (argv0 == "/pkg/bin/crash_reports") {
    return ::forensics::crash_reports::main();
  }
  if (argv0 == "/pkg/bin/exceptions") {
    return ::forensics::exceptions::main();
  }
  if (argv0.rfind("exception_handler_") == 0) {
    return ::forensics::exceptions::handler::main(argv0);
  }
  if (argv0 == "/pkg/bin/feedback_data") {
    return ::forensics::feedback_data::main();
  }
  if (argv0 == "/pkg/bin/last_reboot") {
    return ::forensics::last_reboot::main();
  }
  if (argv0 == "system_log_recorder") {
    return ::forensics::feedback_data::system_log_recorder::main();
  }

  return EXIT_FAILURE;
}
