// Copyright (c) 2012 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 "ui/views/debug_utils.h"

#include <iostream>

#include "base/logging.h"
#include "base/strings/utf_string_conversions.h"
#include "ui/views/view.h"

namespace views {
namespace {
void PrintViewHierarchyImp(const View* view,
                           int indent,
                           std::wostringstream* out) {
  int ind = indent;
  while (ind-- > 0)
    *out << L' ';
  *out << UTF8ToWide(view->GetClassName());
  *out << L' ';
  *out << view->id();
  *out << L' ';
  *out << view->x() << L"," << view->y() << L",";
  *out << view->bounds().right() << L"," << view->bounds().bottom();
  *out << L' ';
  *out << view;
  *out << L'\n';

  for (int i = 0, count = view->child_count(); i < count; ++i)
    PrintViewHierarchyImp(view->child_at(i), indent + 2, out);
}

void PrintFocusHierarchyImp(const View* view,
                            int indent,
                            std::wostringstream* out) {
  int ind = indent;
  while (ind-- > 0)
    *out << L' ';
  *out << UTF8ToWide(view->GetClassName());
  *out << L' ';
  *out << view->id();
  *out << L' ';
  *out << view->GetClassName();
  *out << L' ';
  *out << view;
  *out << L'\n';

  if (view->child_count() > 0)
    PrintFocusHierarchyImp(view->child_at(0), indent + 2, out);

  const View* next_focusable = view->GetNextFocusableView();
  if (next_focusable)
    PrintFocusHierarchyImp(next_focusable, indent, out);
}
}  // namespace

void PrintViewHierarchy(const View* view) {
  std::wostringstream out;
  out << L"View hierarchy:\n";
  PrintViewHierarchyImp(view, 0, &out);
  // Error so users in the field can generate and upload logs.
  LOG(ERROR) << out.str();
}

void PrintFocusHierarchy(const View* view) {
  std::wostringstream out;
  out << L"Focus hierarchy:\n";
  PrintFocusHierarchyImp(view, 0, &out);
  // Error so users in the field can generate and upload logs.
  LOG(ERROR) << out.str();
}

}  // namespace views
