// 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/basictypes.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_
