// Copyright 2025 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_PAGE_ACTION_TEST_SUPPORT_MOCK_PAGE_ACTION_CONTROLLER_H_
#define CHROME_BROWSER_UI_PAGE_ACTION_TEST_SUPPORT_MOCK_PAGE_ACTION_CONTROLLER_H_

#include "base/callback_list.h"
#include "chrome/browser/ui/page_action/page_action_controller.h"
#include "chrome/browser/ui/page_action/test_support/mock_page_action_model.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "ui/actions/action_id.h"
#include "ui/menus/simple_menu_model.h"

namespace page_actions {

class MockPageActionController : public PageActionController {
 public:
  MockPageActionController();
  ~MockPageActionController() override;

  MOCK_METHOD(void, Show, (actions::ActionId), (override));
  MOCK_METHOD(void, Hide, (actions::ActionId), (override));
  void ShowSuggestionChip(actions::ActionId action_id) override {
    ShowSuggestionChip(action_id, SuggestionChipConfig());
  }
  MOCK_METHOD(void,
              ShowSuggestionChip,
              (actions::ActionId, const SuggestionChipConfig&),
              (override));
  MOCK_METHOD(void, HideSuggestionChip, (actions::ActionId), (override));
  MOCK_METHOD(void,
              ShowAnchoredMessage,
              (actions::ActionId, const AnchoredMessageConfig&),
              (override));
  MOCK_METHOD(void, HideAnchoredMessage, (actions::ActionId), (override));
  MOCK_METHOD(std::optional<actions::ActionId>,
              GetActiveAnchoredMessage,
              (),
              (const override));
  MOCK_METHOD(void,
              OverrideText,
              (actions::ActionId, const std::u16string&),
              (override));
  MOCK_METHOD(void, ClearOverrideText, (actions::ActionId), (override));
  MOCK_METHOD(void,
              OverrideAccessibleName,
              (actions::ActionId, const std::u16string&),
              (override));
  MOCK_METHOD(void,
              ClearOverrideAccessibleName,
              (actions::ActionId),
              (override));
  MOCK_METHOD(void,
              OverrideImage,
              (actions::ActionId, const ui::ImageModel&),
              (override));
  MOCK_METHOD(void,
              OverrideImage,
              (actions::ActionId, const ui::ImageModel&, PageActionColorSource),
              (override));
  MOCK_METHOD(void,
              OverrideImage,
              (actions::ActionId,
               const ui::ImageModel&,
               PageActionColorSource,
               std::optional<PageActionAnimationParams>),
              (override));
  MOCK_METHOD(void, ClearOverrideImage, (actions::ActionId), (override));
  MOCK_METHOD(void,
              SetAnimationStyle,
              (actions::ActionId, PageActionAnimationStyle style),
              (override));
  MOCK_METHOD(void,
              SetTrailingImage,
              (actions::ActionId, const ui::ImageModel& trailing_image),
              (override));
  MOCK_METHOD(void, ClearTrailingImage, (actions::ActionId), (override));
  MOCK_METHOD(void,
              SetShowTrailingIcon,
              (actions::ActionId, bool show),
              (override));
  MOCK_METHOD(void,
              OverrideTooltip,
              (actions::ActionId, const std::u16string&),
              (override));
  MOCK_METHOD(void, ClearOverrideTooltip, (actions::ActionId), (override));
  MOCK_METHOD(void,
              OverrideBackgroundColor,
              (actions::ActionId,
               std::optional<ui::ColorId> override_background_color_id),
              (override));
  MOCK_METHOD(void,
              SetAnchoredMessageText,
              (actions::ActionId, const std::u16string&),
              (override));
  MOCK_METHOD(void,
              SetAnchoredMessageAction,
              (actions::ActionId,
               AnchoredMessageActionIconType,
               std::unique_ptr<ui::SimpleMenuModel>),
              (override));
  MOCK_METHOD(void,
              SetAnchoredMessageIcon,
              (actions::ActionId, const ui::ImageModel&),
              (override));
  MOCK_METHOD(void, ClearAnchoredMessageIcon, (actions::ActionId), (override));
  MOCK_METHOD(void,
              SetAnchoredMessageExpandableContent,
              (actions::ActionId,
               std::optional<AnchoredMessageExpandableContent>),
              (override));
  MOCK_METHOD(bool, ActionExists, (actions::ActionId), (const override));
  MOCK_METHOD(void,
              AddObserver,
              (actions::ActionId,
               (base::ScopedObservation<PageActionModelInterface,
                                        PageActionModelObserver>&)),
              (override));
  MOCK_METHOD(ScopedPageActionActivity,
              AddActivity,
              (actions::ActionId),
              (override));
  MOCK_METHOD(base::CallbackListSubscription,
              CreateActionItemSubscription,
              (actions::ActionItem*),
              (override));
  MOCK_METHOD(void, SetShouldHidePageActions, (bool), (override));
  MOCK_METHOD(base::CallbackListSubscription,
              RegisterOnWillDestroyCallback,
              (base::OnceCallback<void(PageActionController&)>),
              (override));
  MOCK_METHOD(void,
              RegisterCallbacks,
              (PageActionPassKey,
               actions::ActionId,
               PageActionController::Delegate*),
              (override));
  MOCK_METHOD(void, DecrementActivityCounter, (actions::ActionId), (override));

 private:
  MockPageActionModel model_;
};

}  // namespace page_actions

#endif  // CHROME_BROWSER_UI_PAGE_ACTION_TEST_SUPPORT_MOCK_PAGE_ACTION_CONTROLLER_H_
