// Copyright 2014 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 DEBUGD_SRC_DEV_FEATURES_TOOL_H_
#define DEBUGD_SRC_DEV_FEATURES_TOOL_H_

#include <string>

#include <base/macros.h>
#include <brillo/errors/error.h>

namespace debugd {

// A collection of functions to enable various development features.
//
// Each feature has two associated functions, one to enable the feature and one
// to query whether it's been enabled or not.
class DevFeaturesTool {
 public:
  DevFeaturesTool() = default;
  ~DevFeaturesTool() = default;

  bool RemoveRootfsVerification(brillo::ErrorPtr* error) const;
  bool EnableBootFromUsb(brillo::ErrorPtr* error) const;
  bool ConfigureSshServer(brillo::ErrorPtr* error) const;
  bool SetUserPassword(const std::string& username,
                       const std::string& password,
                       brillo::ErrorPtr* error) const;
  bool EnableChromeRemoteDebugging(brillo::ErrorPtr* error) const;
  bool EnableChromeDevFeatures(const std::string& root_password,
                               brillo::ErrorPtr* error) const;

  bool QueryDevFeatures(int32_t* flags, brillo::ErrorPtr* error) const;

 private:
  DISALLOW_COPY_AND_ASSIGN(DevFeaturesTool);
};

}  // namespace debugd

#endif  // DEBUGD_SRC_DEV_FEATURES_TOOL_H_
