// Copyright 2017 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.

#ifndef VM_TOOLS_MAITRED_INIT_H_
#define VM_TOOLS_MAITRED_INIT_H_

#include <map>
#include <memory>
#include <string>
#include <vector>

#include <base/macros.h>
#include <base/threading/thread.h>

namespace vm_tools {
namespace maitred {

// Encapsulates all the functionality for which maitred is responsible when it
// runs as pid 1 on a VM.
class Init final {
 public:
  // The reason why a process exited.
  enum class ProcessStatus {
    // Process is in an unknown state.
    UNKNOWN,

    // Process exited.
    EXITED,

    // Killed by a signal.
    SIGNALED,

    // Launched but may or may not have exited yet.
    LAUNCHED,

    // One or more setup steps failed and the process did not launch.
    FAILED,
  };

  // Information about a process launch.
  struct ProcessLaunchInfo {
    ProcessLaunchInfo() = default;

    // Current status of the process.
    ProcessStatus status = ProcessStatus::UNKNOWN;

    // If |status| is EXITED, then this will hold the exit status.  If |status|
    // is SIGNALED, then this will hold the signal number that killed the
    // process.  Otherwise this value is undefined.
    int32_t code = 0;
  };

  // Creates a new instance of this class and performs various bits of early
  // setup up like mounting file systems, creating directories, and setting
  // up signal handlers.
  static std::unique_ptr<Init> Create();
  ~Init();

  // Spawn a process with the given argv and environment.  |argv[0]| must be
  // the full path to the program or the name of a program found in PATH.  If
  // |wait_for_exit| is true, then wait for the spawned process to exit and
  // fill in |launch_info| with the information about the process's exit.
  bool Spawn(std::vector<std::string> argv,
             std::map<std::string, std::string> env,
             bool respawn,
             bool use_console,
             bool wait_for_exit,
             ProcessLaunchInfo* launch_info);

  // Shuts down the system, killing all child processes first with SIGTERM and
  // finally with SIGKILL.
  void Shutdown();

 private:
  Init() = default;
  bool Setup();

  // Worker that lives on a separate thread and is responsible for actually
  // doing all the work.
  class Worker;
  std::unique_ptr<Worker> worker_;

  // The actual worker thread.
  base::Thread worker_thread_{"init worker thread"};

  DISALLOW_COPY_AND_ASSIGN(Init);
};

}  //  namespace maitred
}  // namespace vm_tools

#endif  // VM_TOOLS_MAITRED_INIT_H_
