chromium/ios/chrome/browser/ui/content_suggestions/magic_stack/magic_stack_module.h

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

#ifndef IOS_CHROME_BROWSER_UI_CONTENT_SUGGESTIONS_MAGIC_STACK_MAGIC_STACK_MODULE_H_
#define IOS_CHROME_BROWSER_UI_CONTENT_SUGGESTIONS_MAGIC_STACK_MAGIC_STACK_MODULE_H_

#import <UIKit/UIKit.h>

enum class ContentSuggestionsModuleType;
@class MagicStackModule;

// A protocol for the MagicStackModule delegate.
@protocol MagicStackModuleDelegate

// Called when the module is added to the displayed list.
- (void)magicStackModule:(MagicStackModule*)magicStackModule
     wasDisplayedAtIndex:(NSUInteger)index;

@end

// Base object for all Magic Stack modules configs. Subclass this class when
// creating a new module config.
@interface MagicStackModule : NSObject

// The type of the module config.
@property(nonatomic, assign, readonly) ContentSuggestionsModuleType type;

// YES to display the "See More" button for this module.
// This button takes precedence over the notifications opt-in button.
@property(nonatomic, assign) BOOL shouldShowSeeMore;

// YES to display the notifications opt-in button for this module.
// This button is hidden if the "See More" button is shown.
@property(nonatomic, assign) BOOL showNotificationsOptIn;

// The delegate of the module.
@property(nonatomic, weak) id<MagicStackModuleDelegate> delegate;

@end

#endif  // IOS_CHROME_BROWSER_UI_CONTENT_SUGGESTIONS_MAGIC_STACK_MAGIC_STACK_MODULE_H_