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

#ifndef CHROME_BROWSER_UI_VIEWS_EXTENSIONS_EXTENSIONS_MENU_SITE_PERMISSIONS_PAGE_VIEW_H_
#define CHROME_BROWSER_UI_VIEWS_EXTENSIONS_EXTENSIONS_MENU_SITE_PERMISSIONS_PAGE_VIEW_H_

#include "base/memory/raw_ptr.h"
#include "chrome/browser/ui/extensions/extensions_menu_view_model.h"
#include "extensions/browser/permissions_manager.h"
#include "extensions/common/extension_id.h"
#include "ui/views/metadata/view_factory.h"
#include "ui/views/view.h"
#include "url/origin.h"

namespace views {
class ImageView;
class Label;
class RadioButton;
class ToggleButton;
}  // namespace views

class BrowserWindowInterface;
class ExtensionsMenuHandler;

class ExtensionsMenuSitePermissionsPageView : public views::View {
  METADATA_HEADER(ExtensionsMenuSitePermissionsPageView, views::View)

 public:
  explicit ExtensionsMenuSitePermissionsPageView(
      BrowserWindowInterface* browser,
      extensions::ExtensionId extension_id,
      ExtensionsMenuHandler* menu_handler);
  ExtensionsMenuSitePermissionsPageView(
      const ExtensionsMenuSitePermissionsPageView&) = delete;
  const ExtensionsMenuSitePermissionsPageView& operator=(
      const ExtensionsMenuSitePermissionsPageView&) = delete;
  ~ExtensionsMenuSitePermissionsPageView() override = default;

  // Updates the page contents with the given `site_permissions_state`.
  void Update(ExtensionsMenuViewModel::ExtensionSitePermissionsState
                  site_permissions_state);

  // Updates `show_requests_toggle_` with the given toggle state.
  void UpdateShowRequestsToggle(
      ExtensionsMenuViewModel::ControlState toggle_state);

  extensions::ExtensionId extension_id() { return extension_id_; }
  const url::Origin& origin() const { return origin_; }

  // Accessors used by tests:
  views::ToggleButton* GetShowRequestsToggleForTesting() {
    return show_requests_toggle_;
  }
  views::RadioButton* GetSiteAccessButtonForTesting(
      extensions::PermissionsManager::UserSiteAccess site_access);
  views::Label* GetExtensionNameForTesting();

 private:
  const raw_ptr<BrowserWindowInterface> browser_;
  extensions::ExtensionId extension_id_;
  url::Origin origin_;

  raw_ptr<views::ImageView> extension_icon_;
  raw_ptr<views::Label> extension_name_;
  raw_ptr<views::ToggleButton> show_requests_toggle_;
};

BEGIN_VIEW_BUILDER(/* no export */,
                   ExtensionsMenuSitePermissionsPageView,
                   views::View)
END_VIEW_BUILDER

DEFINE_VIEW_BUILDER(/* no export */, ExtensionsMenuSitePermissionsPageView)

#endif  // CHROME_BROWSER_UI_VIEWS_EXTENSIONS_EXTENSIONS_MENU_SITE_PERMISSIONS_PAGE_VIEW_H_
