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

// This file is kept small as it cannot be unittested (due to the main func).
// So it should only initialie the CLI interface before calling into the
// dedicated DevInstall class.

#include "dev-install/dev_install.h"

#include <unistd.h>

#include <string>

#include <base/logging.h>
#include <brillo/flag_helper.h>
#include <brillo/syslog_logging.h>

using dev_install::DevInstall;

int main(int argc, char* argv[]) {
  DEFINE_string(binhost, "", "URL of the binhost that emerge will use");
  DEFINE_string(binhost_version, "",
                "Version number to use instead of the one in /etc/lsb-release");
  DEFINE_bool(reinstall, false,
              "Remove all installed packages and re-bootstrap emerge");
  DEFINE_bool(uninstall, false, "Remove all installed packages");
  DEFINE_bool(yes, false,
              "Do not prompt for input -- assume yes to all responses");
  DEFINE_bool(only_bootstrap, false,
              "Only attempt to install the bootstrap packages");
  DEFINE_uint32(jobs, 0, "How many install jobs to run in parallel");

  brillo::FlagHelper::Init(argc, argv,
                           "Chromium OS Development Image Installer");

  // This tool is only run by devs, so writing to syslog doesn't make sense.
  brillo::InitLog(brillo::kLogToStderr);

  const base::CommandLine* cl = base::CommandLine::ForCurrentProcess();
  if (cl->GetArgs().size() > 0) {
    LOG(ERROR) << "Unknown extra command line arguments; exiting";
    return EXIT_FAILURE;
  }

  if (FLAGS_uninstall && FLAGS_reinstall) {
    LOG(ERROR) << "--reinstall & --uninstall may not be used together";
    return EXIT_FAILURE;
  }

  if (getuid() != 0) {
    LOG(ERROR) << argv[0] << " must be run as root";
    return EXIT_FAILURE;
  }

  DevInstall dev_install(FLAGS_binhost, FLAGS_binhost_version, FLAGS_reinstall,
                         FLAGS_uninstall, FLAGS_yes, FLAGS_only_bootstrap,
                         FLAGS_jobs);
  return dev_install.Run();
}
