// Copyright 2021 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 MINIOS_PROCESS_MANAGER_INTERFACE_H_
#define MINIOS_PROCESS_MANAGER_INTERFACE_H_

#include <string>
#include <vector>

#include <brillo/errors/error.h>

class ProcessManagerInterface {
 public:
  virtual ~ProcessManagerInterface() = default;

  ProcessManagerInterface(const ProcessManagerInterface&) = delete;
  ProcessManagerInterface& operator=(const ProcessManagerInterface&) = delete;

  struct IORedirection {
    std::string input;
    std::string output;
  };

  virtual int RunCommand(const std::vector<std::string>& cmd,
                         const IORedirection& io_redirection) = 0;

  virtual bool RunBackgroundCommand(const std::vector<std::string>& cmd,
                                    const IORedirection& io_redirection,
                                    pid_t* pid) = 0;

  virtual bool RunCommandWithOutput(const std::vector<std::string>& cmd,
                                    int* return_code,
                                    std::string* stdout_out,
                                    std::string* stderr_out) = 0;

 protected:
  ProcessManagerInterface() = default;
};

#endif  // MINIOS_PROCESS_MANAGER_INTERFACE_H_
