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

#include <memory>
#include <string>

#include <base/macros.h>
#include <chromeos/dbus/data_serialization.h>
#include <chromeos/dbus/dbus_object.h>

#include "buffet/commands/command_proxy_interface.h"

namespace chromeos {
namespace dbus_utils {
class ExportedObjectManager;
}  // namespace dbus_utils
}  // namespace chromeos

namespace buffet {

class CommandInstance;

class DBusCommandProxy : public CommandProxyInterface {
 public:
  DBusCommandProxy(chromeos::dbus_utils::ExportedObjectManager* object_manager,
                   const scoped_refptr<dbus::Bus>& bus,
                   CommandInstance* command_instance);
  ~DBusCommandProxy() override = default;

  void RegisterAsync(
      const chromeos::dbus_utils::AsyncEventSequencer::CompletionAction&
          completion_callback);

  // CommandProxyInterface implementation/overloads.
  void OnStatusChanged(const std::string& status) override;
  void OnProgressChanged(int progress) override;

 private:
  // DBus properties for org.chromium.Buffet.Command interface.
  chromeos::dbus_utils::ExportedProperty<std::string> name_;
  chromeos::dbus_utils::ExportedProperty<std::string> category_;
  chromeos::dbus_utils::ExportedProperty<std::string> id_;
  chromeos::dbus_utils::ExportedProperty<std::string> status_;
  chromeos::dbus_utils::ExportedProperty<int32_t> progress_;
  chromeos::dbus_utils::ExportedProperty<chromeos::dbus_utils::Dictionary>
      parameters_;

  // Handles calls to org.chromium.Buffet.Command.SetProgress(progress).
  void HandleSetProgress(chromeos::ErrorPtr* error, int32_t progress);
  // Handles calls to org.chromium.Buffet.Command.Abort().
  void HandleAbort(chromeos::ErrorPtr* error);
  // Handles calls to org.chromium.Buffet.Command.Cancel().
  void HandleCancel(chromeos::ErrorPtr* error);
  // Handles calls to org.chromium.Buffet.Command.Done().
  void HandleDone(chromeos::ErrorPtr* error);

  dbus::ObjectPath object_path_;
  CommandInstance* command_instance_;

  chromeos::dbus_utils::DBusObject dbus_object_;

  friend class DBusCommandProxyTest;
  friend class DBusCommandDispacherTest;
  DISALLOW_COPY_AND_ASSIGN(DBusCommandProxy);
};

}  // namespace buffet

#endif  // BUFFET_COMMANDS_DBUS_COMMAND_PROXY_H_
