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

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

namespace buffet {

void CommandQueue::Add(std::unique_ptr<CommandInstance> instance) {
  std::string id = instance->GetID();
  LOG_IF(FATAL, id.empty()) << "Command has no ID";
  instance->SetCommandQueue(this);
  auto pair = map_.insert(std::make_pair(id, std::move(instance)));
  LOG_IF(FATAL, !pair.second) << "Command with ID '" << id
                              << "' is already in the queue";
  if (dispatch_interface_)
    dispatch_interface_->OnCommandAdded(pair.first->second.get());
}

std::unique_ptr<CommandInstance> CommandQueue::Remove(
    const std::string& id) {
  std::unique_ptr<CommandInstance> instance;
  auto p = map_.find(id);
  if (p != map_.end()) {
    instance = std::move(p->second);
    instance->SetCommandQueue(nullptr);
    map_.erase(p);
    if (dispatch_interface_)
      dispatch_interface_->OnCommandRemoved(instance.get());
  }
  return instance;
}

CommandInstance* CommandQueue::Find(const std::string& id) const {
  auto p = map_.find(id);
  return (p != map_.end()) ? p->second.get() : nullptr;
}

}  // namespace buffet
