// 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 DEBUGD_SRC_HELPERS_SHILL_PROXY_H_
#define DEBUGD_SRC_HELPERS_SHILL_PROXY_H_

#include <memory>
#include <string>

#include <base/macros.h>
#include <base/memory/ref_counted.h>

#include "debugd/src/helpers/system_service_proxy.h"

namespace debugd {

// Implements a D-Bus proxy to interact with the shill system service.
// See SystemServiceProxy for typical usages.
class ShillProxy : public SystemServiceProxy {
 public:
  // Creates a D-Bus proxy for the shill system service and connects to the
  // system bus. Returns an instance after it successfully connects to the
  // system bus, or nullptr on error.
  static std::unique_ptr<ShillProxy> Create();

  ~ShillProxy() override = default;

  // Gets the properties associated with the interface named |interface_name|
  // of a D-Bus object identified by |object_path| through the GetProperties()
  // D-Bus method exposed by shill. The properties are expected to be a
  // dictionary. Returns base::nullopt on error.
  base::Optional<base::Value> GetProperties(
      const std::string& interface_name,
      const dbus::ObjectPath& object_path) override;

 private:
  explicit ShillProxy(scoped_refptr<dbus::Bus> bus);
  ShillProxy(const ShillProxy&) = delete;
  ShillProxy& operator=(const ShillProxy&) = delete;
};

}  // namespace debugd

#endif  // DEBUGD_SRC_HELPERS_SHILL_PROXY_H_
