// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "chrome/browser/ash/login/help_app_launcher.h"

#include <string>

#include "ash/constants/ash_extension_constants.h"
#include "ash/login/resources/grit/ash_login_strings.h"
#include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversions.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/ash/login/login_web_dialog.h"
#include "chrome/grit/locale_settings.h"
#include "chromeos/ash/components/browser_context_helper/browser_context_helper.h"
#include "content/public/browser/browser_thread.h"
#include "extensions/browser/extension_registry.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/gfx/geometry/rect.h"
#include "ui/gfx/geometry/size.h"
#include "url/gurl.h"

namespace ash {
namespace {

using ::content::BrowserThread;
using ::extensions::ExtensionRegistry;

const char kHelpAppFormat[] = "chrome-extension://%s/oobe.html?id=%d";

}  // namespace

///////////////////////////////////////////////////////////////////////////////
// HelpApp, public:

HelpAppLauncher::HelpAppLauncher(gfx::NativeWindow parent_window)
    : parent_window_(parent_window) {}

void HelpAppLauncher::ShowHelpTopic(HelpTopic help_topic_id) {
  Profile* profile = Profile::FromBrowserContext(
      BrowserContextHelper::Get()->GetSigninBrowserContext());
  ExtensionRegistry* registry = ExtensionRegistry::Get(profile);

  DCHECK(registry);
  if (!registry)
    return;

  const char* extension_id = extension_misc::kHelpAppExtensionId;

  GURL url(base::StringPrintf(kHelpAppFormat, extension_id,
                              static_cast<int>(help_topic_id)));
  // HelpApp component extension presents only in official builds so we can
  // show help only when the extensions is installed.
  if (registry->enabled_extensions().GetByID(url.GetHost())) {
    ShowHelpTopicDialog(profile, GURL(url));
  }
}

///////////////////////////////////////////////////////////////////////////////
// HelpApp, protected:

HelpAppLauncher::~HelpAppLauncher() = default;

///////////////////////////////////////////////////////////////////////////////
// HelpApp, private:

void HelpAppLauncher::ShowHelpTopicDialog(Profile* profile,
                                          const GURL& topic_url) {
  DCHECK_CURRENTLY_ON(BrowserThread::UI);
  LoginWebDialog* dialog = new LoginWebDialog(
      profile, parent_window_,
      l10n_util::GetStringUTF16(IDS_LOGIN_OOBE_HELP_DIALOG_TITLE), topic_url);
  dialog->Show();
  // The dialog object will be deleted on dialog close.
}

}  // namespace ash
