// Copyright 2014 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 "chromecast/browser/devtools/cast_devtools_manager_delegate.h"

#include "base/macros.h"
#include "build/build_config.h"
#include "chromecast/app/grit/shell_resources.h"
#include "content/public/browser/devtools_agent_host.h"
#include "ui/base/resource/resource_bundle.h"

namespace chromecast {
namespace shell {

namespace {
CastDevToolsManagerDelegate* g_devtools_manager_delegate = nullptr;
}  // namespace

// static
CastDevToolsManagerDelegate* CastDevToolsManagerDelegate::GetInstance() {
  DCHECK(g_devtools_manager_delegate);
  return g_devtools_manager_delegate;
}

CastDevToolsManagerDelegate::CastDevToolsManagerDelegate() {
  DCHECK(!g_devtools_manager_delegate);
  g_devtools_manager_delegate = this;
}

CastDevToolsManagerDelegate::~CastDevToolsManagerDelegate() {
  DCHECK_EQ(this, g_devtools_manager_delegate);
  g_devtools_manager_delegate = nullptr;
}

content::DevToolsAgentHost::List
CastDevToolsManagerDelegate::RemoteDebuggingTargets() {
  content::DevToolsAgentHost::List enabled_hosts;
  for (auto* web_contents : enabled_webcontents_) {
    enabled_hosts.push_back(
        content::DevToolsAgentHost::GetOrCreateFor(web_contents));
  }
  return enabled_hosts;
}

void CastDevToolsManagerDelegate::EnableWebContentsForDebugging(
    content::WebContents* web_contents) {
  DCHECK(web_contents);
  enabled_webcontents_.insert(web_contents);
}

void CastDevToolsManagerDelegate::DisableWebContentsForDebugging(
    content::WebContents* web_contents) {
  enabled_webcontents_.erase(web_contents);
}

bool CastDevToolsManagerDelegate::HasEnabledWebContents() const {
  return !enabled_webcontents_.empty();
}

std::string CastDevToolsManagerDelegate::GetDiscoveryPageHTML() {
#if defined(OS_ANDROID)
  return std::string();
#else
  return ui::ResourceBundle::GetSharedInstance()
      .GetRawDataResource(IDR_CAST_SHELL_DEVTOOLS_DISCOVERY_PAGE)
      .as_string();
#endif
}

}  // namespace shell
}  // namespace chromecast
