// 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 COMPONENTS_CONTEXTUAL_SEARCH_MOCK_CONTEXTUAL_SEARCH_CONTEXT_CONTROLLER_H_
#define COMPONENTS_CONTEXTUAL_SEARCH_MOCK_CONTEXTUAL_SEARCH_CONTEXT_CONTROLLER_H_

#include <memory>
#include <optional>

#include "base/functional/callback.h"
#include "base/memory/raw_ptr.h"
#include "base/unguessable_token.h"
#include "components/contextual_search/contextual_search_context_controller.h"
#include "components/lens/contextual_input.h"
#include "components/lens/proto/server/lens_overlay_response.pb.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "third_party/lens_server_proto/aim_communication.pb.h"

namespace contextual_search {

class MockContextualSearchContextController
    : public ContextualSearchContextController {
 public:
  MockContextualSearchContextController();
  ~MockContextualSearchContextController() override;

  MOCK_METHOD(void, InitializeIfNeeded, (), (override));
  MOCK_METHOD(void, SetIsBackgrounded, (bool backgrounded), (override));
  MOCK_METHOD(void, TriggerFetchClusterInfo, (), (override));
  MOCK_METHOD(
      void,
      CreateSearchUrl,
      (std::unique_ptr<CreateSearchUrlRequestInfo> search_url_request_info,
       base::OnceCallback<void(GURL)> callback),
      (override));
  MOCK_METHOD(lens::ClientToAimMessage,
              CreateClientToAimRequest,
              (std::unique_ptr<CreateClientToAimRequestInfo>
                   create_client_to_aim_request_info),
              (override));
  MOCK_METHOD(void,
              AddObserver,
              (ContextUploadStatusObserver * obs),
              (override));
  MOCK_METHOD(void,
              RemoveObserver,
              (ContextUploadStatusObserver * obs),
              (override));
  MOCK_METHOD(void,
              StartFileUploadFlow,
              (const base::UnguessableToken& file_token,
               std::unique_ptr<lens::ContextualInputData> contextual_input_data,
               std::optional<lens::ImageEncodingOptions> image_options),
              (override));
  MOCK_METHOD(bool,
              DeleteFile,
              (const base::UnguessableToken& file_token),
              (override));
  MOCK_METHOD(void, ClearFiles, (), (override));
  MOCK_METHOD(
      std::unique_ptr<lens::proto::LensOverlaySuggestInputs>,
      CreateSuggestInputs,
      (const std::vector<base::UnguessableToken>& attached_context_tokens),
      (override));
  MOCK_METHOD(const FileInfo*,
              GetFileInfo,
              (const base::UnguessableToken& file_token),
              (override));
  MOCK_METHOD(std::vector<raw_ptr<const FileInfo>>,
              GetFileInfoList,
              (),
              (override));
  MOCK_METHOD(base::WeakPtr<ContextualSearchContextController>,
              AsWeakPtr,
              (),
              (override));
};

}  // namespace contextual_search

#endif  // COMPONENTS_CONTEXTUAL_SEARCH_MOCK_CONTEXTUAL_SEARCH_CONTEXT_CONTROLLER_H_
