// Copyright 2016 The Chromium 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 "services/ui/view_manager/view_container_state.h"

#include <ostream>

namespace view_manager {

ViewContainerState::ViewContainerState() {}

ViewContainerState::~ViewContainerState() {}

void ViewContainerState::LinkChild(uint32_t key,
                                   std::unique_ptr<ViewStub> child) {
  DCHECK(children_.find(key) == children_.end());
  DCHECK(child);
  DCHECK(!child->is_linked());

  child->SetContainer(this, key);
  children_.emplace(key, std::move(child));
}

std::unique_ptr<ViewStub> ViewContainerState::UnlinkChild(uint32_t key) {
  auto child_it = children_.find(key);
  DCHECK(child_it != children_.end());
  std::unique_ptr<ViewStub> child(std::move(child_it->second));
  child->Unlink();
  children_.erase(child_it);
  return child;
}

std::vector<std::unique_ptr<ViewStub>> ViewContainerState::UnlinkAllChildren() {
  std::vector<std::unique_ptr<ViewStub>> stubs;
  for (auto& pair : children_) {
    pair.second->Unlink();
    stubs.push_back(std::move(pair.second));
  }
  children_.clear();
  return stubs;
}

ViewState* ViewContainerState::AsViewState() {
  return nullptr;
}

ViewTreeState* ViewContainerState::AsViewTreeState() {
  return nullptr;
}

std::ostream& operator<<(std::ostream& os, ViewContainerState* state) {
  if (!state)
    return os << "null";
  return os << state->FormattedLabel();
}

}  // namespace view_manager
