// 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_DISPATCHER_H_
#define BUFFET_COMMANDS_DBUS_COMMAND_DISPATCHER_H_

#include <map>
#include <string>

#include <base/macros.h>
#include <base/memory/weak_ptr.h>
#include <dbus/bus.h>

#include "buffet/commands/command_dispatch_interface.h"
#include "buffet/commands/dbus_command_proxy.h"

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

namespace buffet {

// Implements D-Bus dispatch of commands. When OnCommandAdded is called over
// CommandDispachInterface, DBusCommandDispacher creates an instance of
// DBusCommandProxy object and advertises it through ExportedObjectManager on
// D-Bus. Command handling processes can watch the new D-Bus object appear
// and communicate with it to update the command handling progress.
// Once command is handled, DBusCommandProxy::Done() is called and the command
// is removed from the command queue and D-Bus ExportedObjectManager.
class DBusCommandDispacher : public CommandDispachInterface {
 public:
  DBusCommandDispacher(
      const scoped_refptr<dbus::Bus>& bus,
      chromeos::dbus_utils::ExportedObjectManager* object_manager = nullptr);
  virtual ~DBusCommandDispacher() = default;

  // CommandDispachInterface overrides. Called by CommandQueue.
  void OnCommandAdded(CommandInstance* command_instance) override;
  void OnCommandRemoved(CommandInstance* command_instance) override;

  // Finds a D-Bus command proxy for the given command instance.
  // Returns nullptr if the proxy does not exist.
  DBusCommandProxy* FindProxy(CommandInstance* command_instance) const;

 protected:
  virtual std::unique_ptr<DBusCommandProxy> CreateDBusCommandProxy(
      CommandInstance* command_instance);

 private:
  scoped_refptr<dbus::Bus> bus_;
  base::WeakPtr<chromeos::dbus_utils::ExportedObjectManager> object_manager_;
  int next_id_;
  // This is the map that tracks relationship between CommandInstance and
  // corresponding DBusCommandProxy objects.
  std::map<CommandInstance*, std::unique_ptr<DBusCommandProxy>> command_map_;

  // Default constructor is used in special circumstances such as for testing.
  DBusCommandDispacher() = default;

  friend class DBusCommandDispacherTest;
  friend class CommandManager;
  DISALLOW_COPY_AND_ASSIGN(DBusCommandDispacher);
};

}  // namespace buffet

#endif  // BUFFET_COMMANDS_DBUS_COMMAND_DISPATCHER_H_
