#if 0
#elif defined(__arm64__) && __arm64__
// Generated by Apple Swift version 6.0.2 effective-5.10 (swiftlang-6.0.2.1.2 clang-1600.0.26.4)
#ifndef VISXSDK_SWIFT_H
#define VISXSDK_SWIFT_H
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wgcc-compat"

#if !defined(__has_include)
# define __has_include(x) 0
#endif
#if !defined(__has_attribute)
# define __has_attribute(x) 0
#endif
#if !defined(__has_feature)
# define __has_feature(x) 0
#endif
#if !defined(__has_warning)
# define __has_warning(x) 0
#endif

#if __has_include(<swift/objc-prologue.h>)
# include <swift/objc-prologue.h>
#endif

#pragma clang diagnostic ignored "-Wauto-import"
#if defined(__OBJC__)
#include <Foundation/Foundation.h>
#endif
#if defined(__cplusplus)
#include <cstdint>
#include <cstddef>
#include <cstdbool>
#include <cstring>
#include <stdlib.h>
#include <new>
#include <type_traits>
#else
#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>
#include <string.h>
#endif
#if defined(__cplusplus)
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wnon-modular-include-in-framework-module"
#if defined(__arm64e__) && __has_include(<ptrauth.h>)
# include <ptrauth.h>
#else
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wreserved-macro-identifier"
# ifndef __ptrauth_swift_value_witness_function_pointer
#  define __ptrauth_swift_value_witness_function_pointer(x)
# endif
# ifndef __ptrauth_swift_class_method_pointer
#  define __ptrauth_swift_class_method_pointer(x)
# endif
#pragma clang diagnostic pop
#endif
#pragma clang diagnostic pop
#endif

#if !defined(SWIFT_TYPEDEFS)
# define SWIFT_TYPEDEFS 1
# if __has_include(<uchar.h>)
#  include <uchar.h>
# elif !defined(__cplusplus)
typedef uint_least16_t char16_t;
typedef uint_least32_t char32_t;
# endif
typedef float swift_float2  __attribute__((__ext_vector_type__(2)));
typedef float swift_float3  __attribute__((__ext_vector_type__(3)));
typedef float swift_float4  __attribute__((__ext_vector_type__(4)));
typedef double swift_double2  __attribute__((__ext_vector_type__(2)));
typedef double swift_double3  __attribute__((__ext_vector_type__(3)));
typedef double swift_double4  __attribute__((__ext_vector_type__(4)));
typedef int swift_int2  __attribute__((__ext_vector_type__(2)));
typedef int swift_int3  __attribute__((__ext_vector_type__(3)));
typedef int swift_int4  __attribute__((__ext_vector_type__(4)));
typedef unsigned int swift_uint2  __attribute__((__ext_vector_type__(2)));
typedef unsigned int swift_uint3  __attribute__((__ext_vector_type__(3)));
typedef unsigned int swift_uint4  __attribute__((__ext_vector_type__(4)));
#endif

#if !defined(SWIFT_PASTE)
# define SWIFT_PASTE_HELPER(x, y) x##y
# define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y)
#endif
#if !defined(SWIFT_METATYPE)
# define SWIFT_METATYPE(X) Class
#endif
#if !defined(SWIFT_CLASS_PROPERTY)
# if __has_feature(objc_class_property)
#  define SWIFT_CLASS_PROPERTY(...) __VA_ARGS__
# else
#  define SWIFT_CLASS_PROPERTY(...) 
# endif
#endif
#if !defined(SWIFT_RUNTIME_NAME)
# if __has_attribute(objc_runtime_name)
#  define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X)))
# else
#  define SWIFT_RUNTIME_NAME(X) 
# endif
#endif
#if !defined(SWIFT_COMPILE_NAME)
# if __has_attribute(swift_name)
#  define SWIFT_COMPILE_NAME(X) __attribute__((swift_name(X)))
# else
#  define SWIFT_COMPILE_NAME(X) 
# endif
#endif
#if !defined(SWIFT_METHOD_FAMILY)
# if __has_attribute(objc_method_family)
#  define SWIFT_METHOD_FAMILY(X) __attribute__((objc_method_family(X)))
# else
#  define SWIFT_METHOD_FAMILY(X) 
# endif
#endif
#if !defined(SWIFT_NOESCAPE)
# if __has_attribute(noescape)
#  define SWIFT_NOESCAPE __attribute__((noescape))
# else
#  define SWIFT_NOESCAPE 
# endif
#endif
#if !defined(SWIFT_RELEASES_ARGUMENT)
# if __has_attribute(ns_consumed)
#  define SWIFT_RELEASES_ARGUMENT __attribute__((ns_consumed))
# else
#  define SWIFT_RELEASES_ARGUMENT 
# endif
#endif
#if !defined(SWIFT_WARN_UNUSED_RESULT)
# if __has_attribute(warn_unused_result)
#  define SWIFT_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
# else
#  define SWIFT_WARN_UNUSED_RESULT 
# endif
#endif
#if !defined(SWIFT_NORETURN)
# if __has_attribute(noreturn)
#  define SWIFT_NORETURN __attribute__((noreturn))
# else
#  define SWIFT_NORETURN 
# endif
#endif
#if !defined(SWIFT_CLASS_EXTRA)
# define SWIFT_CLASS_EXTRA 
#endif
#if !defined(SWIFT_PROTOCOL_EXTRA)
# define SWIFT_PROTOCOL_EXTRA 
#endif
#if !defined(SWIFT_ENUM_EXTRA)
# define SWIFT_ENUM_EXTRA 
#endif
#if !defined(SWIFT_CLASS)
# if __has_attribute(objc_subclassing_restricted)
#  define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA
#  define SWIFT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
# else
#  define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
#  define SWIFT_CLASS_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
# endif
#endif
#if !defined(SWIFT_RESILIENT_CLASS)
# if __has_attribute(objc_class_stub)
#  define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME) __attribute__((objc_class_stub))
#  define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_class_stub)) SWIFT_CLASS_NAMED(SWIFT_NAME)
# else
#  define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME)
#  define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) SWIFT_CLASS_NAMED(SWIFT_NAME)
# endif
#endif
#if !defined(SWIFT_PROTOCOL)
# define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
# define SWIFT_PROTOCOL_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
#endif
#if !defined(SWIFT_EXTENSION)
# define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__)
#endif
#if !defined(OBJC_DESIGNATED_INITIALIZER)
# if __has_attribute(objc_designated_initializer)
#  define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer))
# else
#  define OBJC_DESIGNATED_INITIALIZER 
# endif
#endif
#if !defined(SWIFT_ENUM_ATTR)
# if __has_attribute(enum_extensibility)
#  define SWIFT_ENUM_ATTR(_extensibility) __attribute__((enum_extensibility(_extensibility)))
# else
#  define SWIFT_ENUM_ATTR(_extensibility) 
# endif
#endif
#if !defined(SWIFT_ENUM)
# define SWIFT_ENUM(_type, _name, _extensibility) enum _name : _type _name; enum SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type
# if __has_feature(generalized_swift_name)
#  define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) enum _name : _type _name SWIFT_COMPILE_NAME(SWIFT_NAME); enum SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type
# else
#  define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) SWIFT_ENUM(_type, _name, _extensibility)
# endif
#endif
#if !defined(SWIFT_UNAVAILABLE)
# define SWIFT_UNAVAILABLE __attribute__((unavailable))
#endif
#if !defined(SWIFT_UNAVAILABLE_MSG)
# define SWIFT_UNAVAILABLE_MSG(msg) __attribute__((unavailable(msg)))
#endif
#if !defined(SWIFT_AVAILABILITY)
# define SWIFT_AVAILABILITY(plat, ...) __attribute__((availability(plat, __VA_ARGS__)))
#endif
#if !defined(SWIFT_WEAK_IMPORT)
# define SWIFT_WEAK_IMPORT __attribute__((weak_import))
#endif
#if !defined(SWIFT_DEPRECATED)
# define SWIFT_DEPRECATED __attribute__((deprecated))
#endif
#if !defined(SWIFT_DEPRECATED_MSG)
# define SWIFT_DEPRECATED_MSG(...) __attribute__((deprecated(__VA_ARGS__)))
#endif
#if !defined(SWIFT_DEPRECATED_OBJC)
# if __has_feature(attribute_diagnose_if_objc)
#  define SWIFT_DEPRECATED_OBJC(Msg) __attribute__((diagnose_if(1, Msg, "warning")))
# else
#  define SWIFT_DEPRECATED_OBJC(Msg) SWIFT_DEPRECATED_MSG(Msg)
# endif
#endif
#if defined(__OBJC__)
#if !defined(IBSegueAction)
# define IBSegueAction 
#endif
#endif
#if !defined(SWIFT_EXTERN)
# if defined(__cplusplus)
#  define SWIFT_EXTERN extern "C"
# else
#  define SWIFT_EXTERN extern
# endif
#endif
#if !defined(SWIFT_CALL)
# define SWIFT_CALL __attribute__((swiftcall))
#endif
#if !defined(SWIFT_INDIRECT_RESULT)
# define SWIFT_INDIRECT_RESULT __attribute__((swift_indirect_result))
#endif
#if !defined(SWIFT_CONTEXT)
# define SWIFT_CONTEXT __attribute__((swift_context))
#endif
#if !defined(SWIFT_ERROR_RESULT)
# define SWIFT_ERROR_RESULT __attribute__((swift_error_result))
#endif
#if defined(__cplusplus)
# define SWIFT_NOEXCEPT noexcept
#else
# define SWIFT_NOEXCEPT 
#endif
#if !defined(SWIFT_C_INLINE_THUNK)
# if __has_attribute(always_inline)
# if __has_attribute(nodebug)
#  define SWIFT_C_INLINE_THUNK inline __attribute__((always_inline)) __attribute__((nodebug))
# else
#  define SWIFT_C_INLINE_THUNK inline __attribute__((always_inline))
# endif
# else
#  define SWIFT_C_INLINE_THUNK inline
# endif
#endif
#if defined(_WIN32)
#if !defined(SWIFT_IMPORT_STDLIB_SYMBOL)
# define SWIFT_IMPORT_STDLIB_SYMBOL __declspec(dllimport)
#endif
#else
#if !defined(SWIFT_IMPORT_STDLIB_SYMBOL)
# define SWIFT_IMPORT_STDLIB_SYMBOL 
#endif
#endif
#if defined(__OBJC__)
#if __has_feature(objc_modules)
#if __has_warning("-Watimport-in-framework-header")
#pragma clang diagnostic ignored "-Watimport-in-framework-header"
#endif
@import AVKit;
@import CoreFoundation;
@import Foundation;
@import ObjectiveC;
@import UIKit;
#endif

#endif
#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch"
#pragma clang diagnostic ignored "-Wduplicate-method-arg"
#if __has_warning("-Wpragma-clang-attribute")
# pragma clang diagnostic ignored "-Wpragma-clang-attribute"
#endif
#pragma clang diagnostic ignored "-Wunknown-pragmas"
#pragma clang diagnostic ignored "-Wnullability"
#pragma clang diagnostic ignored "-Wdollar-in-identifier-extension"
#pragma clang diagnostic ignored "-Wunsafe-buffer-usage"

#if __has_attribute(external_source_symbol)
# pragma push_macro("any")
# undef any
# pragma clang attribute push(__attribute__((external_source_symbol(language="Swift", defined_in="VisxSDK",generated_declaration))), apply_to=any(function,enum,objc_interface,objc_category,objc_protocol))
# pragma pop_macro("any")
#endif

#if defined(__OBJC__)

@interface AVPlayerViewController (SWIFT_EXTENSION(VisxSDK))
- (void)viewWillDisappear:(BOOL)animated;
@end


SWIFT_CLASS("_TtC7VisxSDK16LayoutConstraint")
@interface LayoutConstraint : NSLayoutConstraint
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

@class NSString;

@interface LayoutConstraint (SWIFT_EXTENSION(VisxSDK))
@property (nonatomic, readonly, copy) NSString * _Nonnull description;
@end


/// Class representing mediation data for use within the <code>LoadMediationDelegate</code>.
/// Use this class to encapsulate information about Google mediation, such as the class name, ad unit, and ad sizes.
/// note:
/// Conform to the <code>LoadMediationDelegate</code> protocol and use instances of this class to pass mediation data when loading ads within a <code>VisxAdView</code>.
SWIFT_CLASS("_TtC7VisxSDK9Mediation")
@interface Mediation : NSObject
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@class NSIndexPath;
@class VisxCollectionViewCell;

@interface UICollectionView (SWIFT_EXTENSION(VisxSDK))
/// Dequeues an instance of <code>VisxCollectionViewCell</code> for the specified index path and reuse identifier.
/// \param indexPath The index path specifying the location of the cell.
///
/// \param reuseIdentifier A string used to identify the cell for reuse.
///
///
/// returns:
/// An instance of <code>VisxCollectionViewCell</code> dequeued for the specified index path and reuse identifier.
- (VisxCollectionViewCell * _Nonnull)dequeueVisxCellFor:(NSIndexPath * _Nonnull)indexPath reuseIdentifier:(NSString * _Nonnull)reuseIdentifier SWIFT_WARN_UNUSED_RESULT;
@end





@class VisxTableViewCell;

@interface UITableView (SWIFT_EXTENSION(VisxSDK))
/// Dequeues an instance of <code>VisxTableViewCell</code> for the specified index path and reuse identifier.
/// \param indexPath The index path specifying the location of the cell.
///
/// \param reuseIdentifier A string used to identify the cell for reuse.
///
///
/// returns:
/// An instance of <code>VisxTableViewCell</code> dequeued for the specified index path and reuse identifier.
- (VisxTableViewCell * _Nonnull)dequeueVisxCellFor:(NSIndexPath * _Nonnull)indexPath reuseIdentifier:(NSString * _Nonnull)reuseIdentifier SWIFT_WARN_UNUSED_RESULT;
@end







@class UIViewController;
@class NSCoder;

/// A UIView class for displaying Visx ads and handling ad-related events.
/// This class acts as the main container for displaying Visx ads and managing the ad view lifecycle.
/// It provides methods to initialize the VisxAdView and handle various ad events through delegation and callbacks.
SWIFT_CLASS("_TtC7VisxSDK10VisxAdView")
@interface VisxAdView : UIView <UIScrollViewDelegate>
@property (nonatomic) BOOL isMediationAdView;
@property (nonatomic, readonly, copy) NSString * _Nonnull adUnit;
@property (nonatomic) BOOL hasMessageAbove;
@property (nonatomic, strong) UIViewController * _Nullable viewControllerForPresenting;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder SWIFT_UNAVAILABLE;
- (void)didMoveToSuperview;
- (nonnull instancetype)initWithFrame:(CGRect)frame SWIFT_UNAVAILABLE;
@end






@protocol VisxAdViewDelegate;
@protocol VisxHeaderBiddingDelegate;
@class UIScrollView;
@class UIColor;
@class NSError;

@interface VisxAdView (SWIFT_EXTENSION(VisxSDK))
/// VisxAdView - Default Initializer Using Callbacks
/// \param adUnit A unique identifier for the ad unit.
///
/// \param adSize The size of the ad view, specified as a CGSize.
///
/// \param fixedSize A boolean indicating if ad view should have a fixed size. If set to true, the ad view will have a fixed size as specified in the adSize parameter. If false, the ad view may adjust its size dynamically based on the available space.
///
/// \param viewControllerForPresenting An optional parameter specifying the view controller responsible for presenting the ad.
///
/// \param interstitial A boolean indicating if ad is an interstitial ad.
///
/// \param headerBidding A boolean indicating if header bidding is enabled for this ad.
///
/// \param identifier An optional identifier for the ad view. This can be used to distinguish between different ad views if you have multiple instances of <code>VisxAdView</code> in your application.
///
///
/// returns:
/// An instance of the <code>VisxAdView</code> class configured with the specified parameters.
- (nonnull instancetype)initWithAdUnit:(NSString * _Nonnull)adUnit adSize:(CGSize)adSize fixedSize:(BOOL)fixedSize viewControllerForPresenting:(UIViewController * _Nullable)viewControllerForPresenting interstitial:(BOOL)interstitial headerBidding:(BOOL)headerBidding identifier:(NSString * _Nullable)identifier;
/// VisxAdView - Default initializer using delegates
/// \param adUnit A unique identifier for the ad unit.
///
/// \param adViewDelegate VisxAdViewDelegate
///
/// \param adSize The size of the ad view, specified as a CGSize.
///
/// \param fixedSize A boolean indicating if ad view should have a fixed size. If set to true, the ad view will have a fixed size as specified in the adSize parameter. If false, the ad view may adjust its size dynamically based on the available space.
///
/// \param interstitial A boolean indicating if ad is an interstitial ad.
///
/// \param headerBidding A boolean indicating if header bidding is enabled for this ad.
///
/// \param identifier An optional identifier for the ad view. This can be used to distinguish between different ad views if you have multiple instances of <code>VisxAdView</code> in your application.
///
///
/// returns:
/// An instance of the <code>VisxAdView</code> class configured with the specified parameters.
- (nonnull instancetype)initWithAdUnit:(NSString * _Nonnull)adUnit adViewDelegate:(id <VisxAdViewDelegate> _Nonnull)adViewDelegate adSize:(CGSize)adSize fixedSize:(BOOL)fixedSize interstitial:(BOOL)interstitial headerBidding:(BOOL)headerBidding identifier:(NSString * _Nullable)identifier;
/// VisxAdView - Header Bidding initializer using delegates
/// \param adUnit A unique identifier for the ad unit.
///
/// \param headerBiddingDelegate VisxHeaderBiddingDelegate
///
/// \param adSize The size of the ad view, specified as a CGSize.
///
/// \param fixedSize A boolean indicating if ad view should have a fixed size. If set to true, the ad view will have a fixed size as specified in the adSize parameter. If false, the ad view may adjust its size dynamically based on the available space.
///
/// \param interstitial A boolean indicating if ad is an interstitial ad.
///
/// \param identifier An optional identifier for the ad view. This can be used to distinguish between different ad views if you have multiple instances of <code>VisxAdView</code> in your application.
///
///
/// returns:
/// An instance of the <code>VisxAdView</code> class configured with the specified parameters.
- (nonnull instancetype)initWithAdUnit:(NSString * _Nonnull)adUnit headerBiddingDelegate:(id <VisxHeaderBiddingDelegate> _Nonnull)headerBiddingDelegate adSize:(CGSize)adSize fixedSize:(BOOL)fixedSize interstitial:(BOOL)interstitial identifier:(NSString * _Nullable)identifier;
/// VisxAdView - Adaptive banner initializer with dynamic size
/// \param adUnit A unique identifier for the ad unit.
///
/// \param adViewDelegate VisxAdViewDelegate
///
/// \param interstitial A boolean indicating if ad is an interstitial ad.
///
/// \param identifier An optional identifier for the ad view. This can be used to distinguish between different ad views if you have multiple instances of <code>VisxAdView</code> in your application.
///
///
/// returns:
/// An instance of the <code>VisxAdView</code> class configured with the specified parameters.
- (nonnull instancetype)initWithAdUnit:(NSString * _Nonnull)adUnit adViewDelegate:(id <VisxAdViewDelegate> _Nonnull)adViewDelegate interstitial:(BOOL)interstitial identifier:(NSString * _Nullable)identifier;
/// Returns current VisxSDK version
- (NSString * _Nonnull)getSdkVersion SWIFT_WARN_UNUSED_RESULT;
/// Sets the absolute position of the visible view where the creative can be shown.
/// \param anchorX Absolute x position of the ad container in which the creative is added.
///
/// \param anchorY Absolute top y position of UIScrollView/UITableView.
///
/// \param anchorWidth Max width of the ad container.
///
/// \param anchorHeight Max height of the UIScrollView/UITableView.
///
- (void)setAnchorFrameWith:(double)anchorX :(double)anchorY :(double)anchorWidth :(double)anchorHeight;
/// Loads the ad request.
- (void)load;
/// Loads the ad request with custom targeting parameters.
/// \param params Custom targeting parameters for the ad request.
///
- (void)loadWithCustomTargetingParametersWithParams:(NSDictionary<NSString *, NSString *> * _Nonnull)params;
/// Sets the advertising label above the creative.
/// \param label The text to be set as the advertising label above the creative.
///
- (void)advertisingLabelTextWithLabel:(NSString * _Nonnull)label;
/// Deallocates the current <code>VisxAdView</code>.
- (void)deallocAdView;
/// Returns the <code>VisxAdView</code> for display within a scroll view.
/// \param scroll The scroll view where the creative will be displayed.
///
///
/// returns:
/// The current <code>VisxAdView</code>.
- (UIView * _Nonnull)getCreativeInScrollviewWithScroll:(UIScrollView * _Nonnull)scroll SWIFT_WARN_UNUSED_RESULT;
/// Returns the reactive <code>VisxAdView</code>.
///
/// returns:
/// The current <code>VisxAdView</code>.
- (UIView * _Nullable)getReactiveCreative SWIFT_WARN_UNUSED_RESULT;
/// Presents the interstitial ad from the current UIViewController.
- (void)showInterstitial;
/// Presents the interstitial ad from the specified UIViewController.
/// \param controller The UIViewController from which to present the interstitial ad.
///
- (void)showInterstitialFromViewControllerWithController:(UIViewController * _Nonnull)controller;
/// Enables the understitial effect for the <code>VisxAdView</code>.
/// \param scrollView The scroll view associated with the ad view.
///
- (void)scrollViewDidScroll:(UIScrollView * _Nonnull)scrollView;
/// Checks if the placement type is interstitial.
///
/// returns:
/// A boolean indicating if placement type is interstitial.
- (BOOL)isInterstitial SWIFT_WARN_UNUSED_RESULT;
/// Sets the interstitial background color.
/// \param color The background color to be set for the interstitial ad.
///
- (void)setInterstitialBackgroundColorWithColor:(UIColor * _Nonnull)color;
/// Renders the ad when header bidding is enabled.
- (void)renderAd;
/// Adds a friendly obstruction for the OM SDK.
/// \param view The view to be marked as a friendly obstruction.
///
/// \param detailedReason A detailed reason explaining why the view is considered a friendly obstruction.
///
- (void)addFriendlyObstractionWithView:(UIView * _Nonnull)view detailedReason:(NSString * _Nonnull)detailedReason;
/// Adds friendly obstructions for the OM SDK in a dictionary format [UIView: String].
/// \param viewsAndReasons A dictionary containing views and their corresponding detailed reasons for being considered friendly obstructions.
///
- (void)addFriendlyObstractionWithViewsAndReasons:(NSDictionary<UIView *, NSString *> * _Nonnull)viewsAndReasons;
/// Updates the navigation bar height in SwiftUI when using the .automatic style for navigationBarTitleDisplayMode.
/// \param height The new height of the navigation bar.
///
- (void)updateNavigationBarHeight:(CGFloat)height;
/// Called when an ad view receives an ad successfully from the Google mediation network.
/// \param bannerView The banner view that received the ad.
///
- (void)adViewDidReceiveAdWithBannerView:(UIView * _Nonnull)bannerView;
/// Called when an ad view fails to receive an ad from the Google mediation network.
/// \param bannerView The banner view that failed to receive an ad.
///
/// \param error An error object indicating the reason for the failure.
///
- (void)didFailToReceiveAdWithErrorWithBannerView:(UIView * _Nonnull)bannerView error:(NSError * _Nonnull)error;
@end



enum VisxPlacementEffect : NSInteger;

/// Protocol defining methods to handle events and interactions with a <code>VisxAdView</code>.
/// Conform to this protocol to receive callbacks for important events in the lifecycle of a <code>VisxAdView</code>.
SWIFT_PROTOCOL("_TtP7VisxSDK18VisxAdViewDelegate_")
@protocol VisxAdViewDelegate
/// Asks the delegate for the view controller that should be used to present modal views (e.g., for opening landing pages).
///
/// returns:
/// The view controller to use for presenting modal views.
- (UIViewController * _Nonnull)viewControllerForPresentingVisxAdView SWIFT_WARN_UNUSED_RESULT;
/// Informs the delegate that the <code>VisxAdView</code> has been initialized and is ready to be added as a subview.
/// \param visxAdView The <code>VisxAdView</code> instance that has been initialized.
///
/// \param effect The placement effect applied to the ad view.
///
- (void)visxAdViewDidInitializeWithVisxAdView:(VisxAdView * _Nonnull)visxAdView effect:(enum VisxPlacementEffect)effect;
@optional
/// Called when an error occurs during the loading or rendering of the ad.
- (void)visxAdFailedWithErrorWithVisxAdView:(VisxAdView * _Nonnull)visxAdView message:(NSString * _Nonnull)message code:(NSInteger)code;
/// Called when the size of the <code>VisxAdView</code> changes.
- (void)visxAdViewSizeChangeWithVisxAdView:(VisxAdView * _Nonnull)visxAdView width:(CGFloat)width height:(CGFloat)height;
/// Called when the placement effect applied to the <code>VisxAdView</code> changes.
- (void)visxAdViewEffectChangeWithVisxAdView:(VisxAdView * _Nonnull)visxAdView effect:(enum VisxPlacementEffect)effect;
/// Called when the <code>VisxAdView</code> is closed.
- (void)visxAdViewClosedWithVisxAdView:(VisxAdView * _Nonnull)visxAdView;
/// Called when the user clicks on the <code>VisxAdView</code>.
- (void)visxAdViewClickedWithVisxAdView:(VisxAdView * _Nonnull)visxAdView;
/// Called when the landing page associated with the ad is opened.
- (void)visxLandingPageOpened;
/// Called when the app should suspend for the ad interaction.
- (void)appShouldSuspendForAdWithVisxAdView:(VisxAdView * _Nonnull)visxAdView;
/// Called when the app should resume from the ad interaction.
- (void)appShouldResumeFromAdWithVisxAdView:(VisxAdView * _Nonnull)visxAdView;
/// Called when the video content in the ad finishes playing.
- (void)visxAdVideoFinishedWithVisxAdView:(VisxAdView * _Nonnull)visxAdView;
/// Called when an interstitial ad is about to be closed.
- (void)visxAdInterstitialWillBeClosedWithVisxAdView:(VisxAdView * _Nonnull)visxAdView;
/// Called when an interstitial ad is closed.
- (void)visxAdInterstitialClosedWithVisxAdView:(VisxAdView * _Nonnull)visxAdView;
/// Called when a sticky ad is opened.
- (void)visxAdStickyOpenedWithVisxAdView:(VisxAdView * _Nonnull)visxAdView;
/// Called when a sticky ad is about to be closed.
- (void)visxAdStickyWillBeClosedWithVisxAdView:(VisxAdView * _Nonnull)visxAdView;
/// Called when a sticky ad is closed.
- (void)visxAdStickyClosedWithVisxAdView:(VisxAdView * _Nonnull)visxAdView;
@end


/// Custom collection view cell designed for displaying <code>VisxAdView</code> instances within a <code>UICollectionView</code>.
/// Use this cell class to integrate <code>VisxAdView</code> instances into your collection view.
/// Example:
/// \code
/// let adCell = collectionView.dequeueVisxCell(for: indexPath, reuseIdentifier: VisxCollectionViewCell.visxCellIdentifier)
/// adCell.showAd(adView: yourAdView, collectionView: collectionView)
/// return adCell
///
/// \endcodenote:
/// Conform to this cell class when implementing ad displays within a collection view using <code>VisxAdView</code>.
SWIFT_CLASS_NAMED("VisxCollectionViewCell")
@interface VisxCollectionViewCell : UICollectionViewCell
/// The identifier used to dequeue instances of <code>VisxCollectionViewCell</code>.
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull visxCellIdentifier;)
+ (NSString * _Nonnull)visxCellIdentifier SWIFT_WARN_UNUSED_RESULT;
/// Displays the provided <code>VisxAdView</code> within the collection view cell.
/// \param adView The <code>VisxAdView</code> instance to be displayed.
///
/// \param collectionView The <code>UICollectionView</code> to which the cell belongs.
///
- (void)showAdWithAdView:(VisxAdView * _Nonnull)adView collectionView:(UICollectionView * _Nonnull)collectionView;
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder OBJC_DESIGNATED_INITIALIZER;
@end


/// Protocol defining methods to handle header bidding events and interactions with a <code>VisxAdView</code>.
/// Conform to this protocol to receive callbacks for header bidding-related events in the lifecycle of a <code>VisxAdView</code>.
/// Example:
/// \code
/// class YourHeaderBiddingViewController: UIViewController, VisxHeaderBiddingDelegate {
///     func viewControllerForPresentingVisxAdView() -> UIViewController {
///         return self
///     }
///
///     func visxAdRequestStarted(visxAdView: VisxAdView) {
///         // Implement logic when the ad request has started
///     }
///
///     func visxAdResponseReceived(visxAdView: VisxAdView, price: Decimal, currency: String) {
///         // Implement logic when the ad response with header bidding information is received
///     }
/// }
///
/// \endcode
SWIFT_PROTOCOL("_TtP7VisxSDK25VisxHeaderBiddingDelegate_")
@protocol VisxHeaderBiddingDelegate <VisxAdViewDelegate>
@optional
/// Called when the ad request for header bidding has started.
- (void)visxAdRequestStartedWithVisxAdView:(VisxAdView * _Nonnull)visxAdView;
@required
/// Called when the ad response with header bidding information is received.
/// \param visxAdView The <code>VisxAdView</code> instance for which the header bidding ad response is received.
///
/// \param price The price associated with the header bidding ad response.
///
/// \param currency The currency in which the price is expressed.
///
- (void)visxAdResponseReceivedWithVisxAdView:(VisxAdView * _Nonnull)visxAdView price:(NSDecimal)price currency:(NSString * _Nonnull)currency;
@end


/// A utility class providing helper methods for mediation-related tasks.
SWIFT_CLASS("_TtC7VisxSDK18VisxMediationUtils")
@interface VisxMediationUtils : NSObject
/// Returns the topmost view controller in the view hierarchy.
///
/// returns:
/// The topmost view controller, or nil if not found.
+ (UIViewController * _Nullable)topMostController SWIFT_WARN_UNUSED_RESULT;
/// Parses the mediation response string to extract the ad size information.
/// \param serverParameter The mediation response string.
///
///
/// returns:
/// The ad size as a CGSize.
+ (CGSize)visxGetAdSizeFromStringWithServerParameter:(NSString * _Nonnull)serverParameter SWIFT_WARN_UNUSED_RESULT;
/// Returns the notification center string constant for Google Ad updates.
///
/// returns:
/// The notification center string.
+ (NSString * _Nonnull)visxGoogleAdUpdatedViewString SWIFT_WARN_UNUSED_RESULT;
/// Parses the mediation response string to extract the creative ID.
/// \param serverParameter The mediation response string.
///
///
/// returns:
/// The creative ID.
+ (NSString * _Nonnull)visxGetAUIDFromStringWithServerParameter:(NSString * _Nonnull)serverParameter SWIFT_WARN_UNUSED_RESULT;
/// Parses the mediation response string to extract the publisher app domain.
/// \param serverParameter The mediation response string.
///
///
/// returns:
/// The publisher app domain.
+ (NSString * _Nonnull)visxGetAppDomainFromStringWithServerParameter:(NSString * _Nonnull)serverParameter SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

/// Enum representing different types of placement effects in the VisxSDK framework.
typedef SWIFT_ENUM(NSInteger, VisxPlacementEffect, open) {
/// Represents a fullscreen overlay ad effect.
  VisxPlacementEffectFullscreenOverlay = 0,
/// Represents a sitebar ad effect.
  VisxPlacementEffectSitebar = 1,
/// Represents a sticky ad effect.
  VisxPlacementEffectSticky = 2,
/// Represents an inline to sticky transition ad effect.
  VisxPlacementEffectInlineToSticky = 3,
/// Represents an understitial mini ad effect.
  VisxPlacementEffectUnderstitialMini = 4,
/// Represents an understitial mini to sticky transition ad effect.
  VisxPlacementEffectUnderstitialMiniToSticky = 5,
/// Represents a zoom ad effect.
  VisxPlacementEffectZoom = 6,
/// Represents a zoom to sticky transition ad effect.
  VisxPlacementEffectZoomToSticky = 7,
/// Represents no specific placement effect.
  VisxPlacementEffectNone = 8,
/// Represents a branded player ad effect.
  VisxPlacementEffectBrandedplayer = 9,
/// Represents no effect within a sitebar ad.
  VisxPlacementEffectNoneinsitebar = 10,
/// Represents no effect within a sticky ad.
  VisxPlacementEffectNoneinsticky = 11,
};

typedef SWIFT_ENUM(NSInteger, VisxPlacementType, open) {
  VisxPlacementTypeInline = 0,
  VisxPlacementTypeInterstitial = 1,
};


/// Singleton manager class responsible for initializing and managing the VisxSDK.
/// Use this class to perform SDK initialization, retrieve SDK version information, set up remote configuration, and observe application state changes.
/// Example:
/// \code
/// let sdkManager = VisxSDKManager.sharedInstance()
/// sdkManager.initializeSDK()
/// let sdkVersion = sdkManager.SDKVersion()
///
/// \endcode
SWIFT_CLASS_NAMED("VisxSDKManager")
@interface VisxSDKManager : NSObject
/// Retrieves the shared instance of <code>VisxSDKManager</code>.
///
/// returns:
/// The shared instance of <code>VisxSDKManager</code>.
+ (VisxSDKManager * _Nonnull)sharedInstance SWIFT_WARN_UNUSED_RESULT;
/// Initializes the VisxSDK.
- (void)initializeSDK;
/// Retrieves the current SDK version.
///
/// returns:
/// The current SDK version as a string.
- (NSString * _Nonnull)SDKVersion SWIFT_WARN_UNUSED_RESULT;
/// Sets up remote configuration with the specified site ID.
/// \param siteId The site ID for remote configuration.
///
- (void)setRemoteConfigSiteIdWith:(NSString * _Nonnull)siteId;
/// Sets the shared namespace for the VisxSDK.
/// \param namespace The UUID string to set as the shared namespace.
///
- (void)setSharedNamespaceWithUuid:(NSString * _Nonnull)namespace_;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end


/// Custom table view cell designed for displaying <code>VisxAdView</code> instances within a <code>UITableView</code>.
/// Use this cell class to integrate <code>VisxAdView</code> instances into your table view.
/// Example:
/// \code
/// let adCell = tableView.dequeueVisxCell(for: indexPath, reuseIdentifier: VisxTableViewCell.visxCellIdentifier)
/// adCell.showAd(adView: yourAdView, tableView: tableView)
/// return adCell
///
/// \endcodenote:
/// Conform to this cell class when implementing ad displays within a table view using <code>VisxAdView</code>.
SWIFT_CLASS_NAMED("VisxTableViewCell")
@interface VisxTableViewCell : UITableViewCell
/// The identifier used to dequeue instances of <code>VisxTableViewCell</code>.
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull visxCellIdentifier;)
+ (NSString * _Nonnull)visxCellIdentifier SWIFT_WARN_UNUSED_RESULT;
/// Displays the provided <code>VisxAdView</code> within the table view cell.
/// \param adView The <code>VisxAdView</code> instance to be displayed.
///
/// \param tableView The <code>UITableView</code> to which the cell belongs.
///
- (void)showAdWithAdView:(VisxAdView * _Nonnull)adView tableView:(UITableView * _Nonnull)tableView;
- (nonnull instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString * _Nullable)reuseIdentifier SWIFT_UNAVAILABLE;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder SWIFT_UNAVAILABLE;
@end

#endif
#if __has_attribute(external_source_symbol)
# pragma clang attribute pop
#endif
#if defined(__cplusplus)
#endif
#pragma clang diagnostic pop
#endif

#else
#error unsupported Swift architecture
#endif
