#if 0
#elif defined(__arm64__) && __arm64__
// Generated by Apple Swift version 6.1.2 effective-5.10 (swiftlang-6.1.2.1.2 clang-1700.0.13.5)
#ifndef TEADSSDK_SWIFT_H
#define TEADSSDK_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 unsigned char char8_t;
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 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="TeadsSDK",generated_declaration))), apply_to=any(function,enum,objc_interface,objc_category,objc_protocol))
# pragma pop_macro("any")
#endif

#if defined(__OBJC__)

/// Native Root Component
SWIFT_CLASS("_TtC8TeadsSDK15CommonComponent")
@interface CommonComponent : NSObject
/// You should call it when view like Call to Action button is tapped
/// This will open link on SFSafariViewController or open directly an app depending on the link itself
- (void)didTapView;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

/// Native overlay component that could be put over playerView such as <em>AdChoices</em> or <em>ClickToAction</em>
/// note:
/// This component will be considered as friendly obstruction by our Third Party Viewability SDK (<a href="https://iabtechlab.com/standards/open-measurement-sdk/">Open Measurement</a>)
SWIFT_CLASS("_TtC8TeadsSDK16OverlayComponent")
@interface OverlayComponent : CommonComponent
@end

/// Native Component containing AdChoices <code>AdChoicesComponent/clickThroughUrl</code>
/// Teads is partner of DAA <a href="https://youradchoices.com/participating#CompanyT">Digital Advertising Alliance</a>
/// note:
/// AdChoices component and associated logo is automatically added to <code>TeadsNativeAdView</code>
SWIFT_CLASS("_TtC8TeadsSDK18AdChoicesComponent")
@interface AdChoicesComponent : OverlayComponent
@end

/// Enumeration of Teads’ error codes.
/// Error code is part of the <code>AdFailReason</code> object returned through placement delegate <code>TeadsAdPlacementDelegate/didFailToReceiveAd(reason:)</code>
/// You can switch over it in order to adapt logic regarding error case
typedef SWIFT_ENUM(NSInteger, AdErrorCode, open) {
/// When no slot exists for ad
  AdErrorCodeErrorNoSlot = 1,
/// Connectivity network issue
  AdErrorCodeErrorNetwork = 2,
/// AdServer does not responds with an ad
  AdErrorCodeErrorNotFilled = 3,
/// Ad parsing error
  AdErrorCodeErrorBadResponse = 4,
/// VAST error
/// note:
/// see <a href="https://wiki.iabtechlab.com/index.php?title=VAST_Error_Code_Troubleshooting_Matrix">IAB Error code matrix</a>
  AdErrorCodeErrorVastError = 5,
/// Placement Identifier is missing
  AdErrorCodeErrorUserIdMissing = 6,
/// Internal error
/// note:
/// some decoding or SDK internal components have failed
  AdErrorCodeErrorInternal = 7,
/// App (bundle identifier) has been disabled on purpose
/// note:
/// when some app version are corrupted, Teads disable thoses versions
  AdErrorCodeDisabledApp = 8,
/// Ad Request has returned an error
  AdErrorCodeErrorAdRequest = 9,
};

@class NSUUID;
@class NSString;
/// Error returned when ad request has failed. The failure is usually due to network
/// connectivity or ad availablility (i.e., no fill).
SWIFT_CLASS("_TtC8TeadsSDK12AdFailReason")
@interface AdFailReason : NSObject
/// Error code enumeration value
@property (nonatomic, readonly) enum AdErrorCode code;
/// Request identifier allows you to match with the returned value from <code>placement.requestAd()</code> call
@property (nonatomic, readonly, copy) NSUUID * _Null_unspecified requestIdentifier;
/// Contains <code>AdErrorCode</code> and error message, prefer use of <code>localizedDescription</code>
@property (nonatomic, readonly, copy) NSString * _Nonnull description;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

/// Native container component: represent the overall container of native ad view
SWIFT_CLASS("_TtC8TeadsSDK18ContainerComponent")
@interface ContainerComponent : CommonComponent
@end

@class UIImage;
/// Native image component containing image url
/// note:
/// Image data content is automatically pre-loaded, you can retrieve content using <code>ImageComponent/loadImage(async:success:failure:)</code>
SWIFT_CLASS("_TtC8TeadsSDK14ImageComponent")
@interface ImageComponent : CommonComponent
/// Loads Image data content asynchronously depending on the needs
/// warning:
/// specifying <code>async</code> parameter to false will block thread execution
/// note:
/// we strongly encourage to use this method to retrieve content and associate with <code>UIImageView</code>
/// \param async default value is true, image data loading will be performed asynchronously (very recommanded) otherwise the loading is performed synchronously (thread blocking)
///
/// \param success closure will be called once image data has been successfully loaded
///
/// \param failure failure will be called when image loading has failed: can fail for multiple reasong connectivity, resource unavailable, …
///
- (void)loadImageWithAsync:(BOOL)async success:(void (^ _Nullable)(UIImage * _Nonnull))success failure:(void (^ _Nullable)(NSError * _Nonnull))failure;
/// load Image synchronously, prefer using <code>ImageComponent/loadImage(async:success:failure:)</code> instead
/// warning:
/// this computed var is blocking thread execution in order to download image data.
@property (nonatomic, readonly, strong) UIImage * _Nullable image;
@end

/// A flag used to determine how TeadsMediaView lays out its content when its bounds change.
typedef SWIFT_ENUM(NSInteger, MediaScale, open) {
/// Contents scaled to fill with fixed aspect. some portion of content may be clipped.
/// Behaviour is similar to <code>UIView.ContentMode.scaleToFill</code>.
  MediaScaleScaleAspectFill = 0,
/// Contents scaled to fit with fixed aspect. remainder is transparent.
/// Behaviour is similar to <code>UIView.ContentMode.scaleAspectFit</code>.
  MediaScaleScaleAspectFit = 1,
};

/// EU Transparency & Consent Framework versions
/// note:
/// Europe  General Data Protection Regulation (GDPR) see <a href="https://iabeurope.eu/transparency-consent-framework/">Transparency Consent Framework</a>
typedef SWIFT_ENUM(NSInteger, TCFVersion, open) {
/// Version 1 of TCF
/// note:
/// No longer supported since 15 August 2020
  TCFVersionV1 = 1,
/// Version 2 of TCF
  TCFVersionV2 = 2,
};

/// This builder allows you to bind UI elements programmatically using <code>TeadsNativeAdView/bind(_:tagBinder:)</code>
SWIFT_CLASS("_TtC8TeadsSDK16TagBinderBuilder")
@interface TagBinderBuilder : NSObject
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
/// A non-zero tag for the title label view to be rendered. The maximum length will be 50 characters.
/// UIView element should be a <code>UILabel</code>
@property (nonatomic) NSInteger titleLabelTag;
/// A non-zero tag for content / body / description label view to be rendered. The maximum length will be 150 characters.
/// UIView element should be a ``UILabel```
@property (nonatomic) NSInteger contentLabelTag;
/// A non-zero tag for media content view to be rendered.
/// UIView element must be a <code>TeadsMediaView</code>
@property (nonatomic) NSInteger mediaViewTag;
/// A non-zero tag for icon image view to be rendered.
/// UIView element must be a <code>UIImageView</code>
@property (nonatomic) NSInteger iconImageViewTag;
/// A non-zero tag for advertiser label view to be rendered. The maximum length will be 25 characters.
/// UIView element should be a <code>UILabel</code>
@property (nonatomic) NSInteger advertiserLabelTag;
/// A non-zero tag for call to action button view to be rendered. The maximum length will be 15 characters.
/// UIView element should be a <code>UIButton</code>
@property (nonatomic) NSInteger callToActionButtonTag;
/// A non-zero tag for star rating content view to be rendered.
@property (nonatomic) NSInteger ratingViewTag;
/// A non-zero tag for price content view to be rendered.
/// UIView element should be a <code>UILabel</code>
@property (nonatomic) NSInteger priceLabelTag;
@end

@class TeadsAdPlacementSettings;
@protocol TeadsInReadAdPlacementDelegate;
@protocol TeadsInReadAdPlacement;
@protocol TeadsPrebidAdPlacement;
/// The <code>Teads</code> class defines the main entry point to start implementing TeadsSDK.
/// From this class you can statically create placements
/// <ul>
///   <li>
///     inRead: call <code>Teads/createInReadPlacement(pid:settings:delegate:)</code>
///   </li>
///   <li>
///     native: call <code>Teads/createNativePlacement(pid:settings:delegate:)</code>
///   </li>
/// </ul>
/// In order to increase TeadsSDK launch speed and load ads faster, we strongly suggest to call <code>Teads/configure()</code> into <code>AppDelegate.didFinishLaunchingWithOptions</code>
SWIFT_CLASS("_TtC8TeadsSDK5Teads")
@interface Teads : NSObject
/// Current Teads SDK Version value
/// Value is <a href="https://semver.org/">semver</a> format compliant
/// note:
/// This value does not rely anymore on <code>CFBundleShortVersionString</code> plist value since Xcode auto update all versions declared in plists with app bundle version value during archive process
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull sdkVersion;)
+ (NSString * _Nonnull)sdkVersion SWIFT_WARN_UNUSED_RESULT;
/// Create an inRead ad placement to request inRead ads
/// important:
/// You must own/retain <code>TeadsInReadAdPlacement</code> instance, otherwise ads could not be delivered properly: you can free placement instance on       <code>TeadsInReadAdPlacementDelegate/didReceiveAd(ad:adRatio:)</code> or  <code>TeadsAdPlacementDelegate/didFailToReceiveAd(reason:)</code>
/// note:
/// See <a href="https://support.teads.tv/support/solutions/articles/36000314722-inread-classic-integration">InRead implementation guide</a> documentation
/// \param pid Your Teads placement identifier for <em>inRead</em> ads
///
/// \param settings The placement’s related settings you want to apply
///
/// \param delegate TeadsInReadAdPlacementDelegate to follow ad placement lifecycle
///
///
/// returns:
/// TeadsInReadAdPlacement instance, this instance must be owned/retained
+ (id <TeadsInReadAdPlacement> _Nullable)createInReadPlacementWithPid:(NSInteger)pid settings:(TeadsAdPlacementSettings * _Nonnull)settings delegate:(id <TeadsInReadAdPlacementDelegate> _Nullable)delegate SWIFT_WARN_UNUSED_RESULT;
/// Create an  inRead ad placement to request load Prebid ad response
/// important:
/// You must own/retain <code>TeadsInReadAdPlacement</code> instance, otherwise ads could not be delivered properly: you can free placement instance on       <code>TeadsInReadAdPlacementDelegate/didReceiveAd(ad:adRatio:)</code> or  <code>TeadsAdPlacementDelegate/didFailToReceiveAd(reason:)</code>
/// note:
/// See <a href="https://support.teads.tv/support/solutions/articles/36000314722-inread-classic-integration">InRead implementation guide</a> documentation
/// \param settings The placement’s related settings you want to apply
///
/// \param delegate TeadsInReadAdPlacementDelegate to follow ad placement lifecycle
///
///
/// returns:
/// TeadsInReadAdPlacement instance, this instance must be owned/retained
+ (id <TeadsPrebidAdPlacement> _Nullable)createPrebidPlacementWithSettings:(TeadsAdPlacementSettings * _Nonnull)settings delegate:(id <TeadsInReadAdPlacementDelegate> _Nullable)delegate SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

@interface Teads (SWIFT_EXTENSION(TeadsSDK))
/// In order to increase TeadsSDK launch speed and load ads faster, call <code>Teads/configure()</code> into <code>AppDelegate.didFinishLaunchingWithOptions</code>
/// <em>Teads Crash Monitoring</em> is a tool we use to monitor crashes that may occur ONLY IN OUR SDK.
/// This tool is really helpful for us and it aims to improve our product  continuously.
/// You can disable the  crash monitoring feature by adding <code>disableCrashMonitoring()</code> in the TeadsAdPlacementSettings.
/// note:
/// TeadsSDK does not disturb any third party crash handler/reporter such as Crashlytics
/// warning:
/// To ensure the crash handler is ready to catch crashes you need to initialize Teads handler in <code>AppDelegate</code>
+ (void)configure;
@end

@protocol TeadsAdDelegate;
@protocol TeadsPlaybackDelegate;
/// Root Ad Object inherited by <code>TeadsInReadAd</code> & <code>TeadsNativeAd</code>
SWIFT_CLASS("_TtC8TeadsSDK7TeadsAd")
@interface TeadsAd : NSObject
/// Optional delegate object that receives state changes notifications from TeadsAd.
/// Usually this is a <code>UIViewController</code>.
@property (nonatomic, weak) id <TeadsAdDelegate> _Nullable delegate;
/// Optional delegate object that receives playback lifecycle changes notifications from TeadsAd.
/// Usually this is a <code>UIViewController</code>.
@property (nonatomic, weak) id <TeadsPlaybackDelegate> _Nullable playbackDelegate;
/// Request identifier allows you to match the returned value from <code>placement.requestAd</code> / <code>placement.loadAd</code> call
@property (nonatomic, readonly, copy) NSUUID * _Nonnull requestIdentifier;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@class NSCoder;
/// The Teads AdChoices view is responsible to render the optionView or AdChoices view.
/// Teads is partner of DAA <a href="https://youradchoices.com/participating#CompanyT">Digital Advertising Alliance</a>
SWIFT_CLASS("_TtC8TeadsSDK18TeadsAdChoicesView")
@interface TeadsAdChoicesView : UIView
- (nonnull instancetype)initWithBinding:(OverlayComponent * _Nullable)component OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)_ SWIFT_UNAVAILABLE;
- (nonnull instancetype)initWithFrame:(CGRect)frame SWIFT_UNAVAILABLE;
@end

@class UIViewController;
/// Delegate methods needed to follow Teads ads lifecycle.
SWIFT_PROTOCOL("_TtP8TeadsSDK15TeadsAdDelegate_")
@protocol TeadsAdDelegate
/// Called when an ad wants to present a view controller modally (e.g. safariViewController for call to action or the full screen controller).
/// note:
/// The event will not be triggered on the main thread.
/// \param ad The Teads ad related to the action.
///
///
/// returns:
/// The UIViewController on which we will present the content.
- (UIViewController * _Nullable)willPresentModalViewWithAd:(TeadsAd * _Nonnull)ad SWIFT_WARN_UNUSED_RESULT;
@optional
/// Called when the ad has encountered an issue, in this case you need to remove the slot or you will have a blank space.
/// \param ad The Teads ad that encountered an issue.
///
/// \param error The related error.
///
- (void)didCatchErrorWithAd:(TeadsAd * _Nonnull)ad error:(NSError * _Nonnull)error;
/// Called when the ad has been close, in this case you need to close the slot or you will have a blank space.
/// note:
/// Only relevant for <code>TeadsInReadAd</code>, you can remove the ``TeadsInReadAdView` from your super view.
/// \param ad The Teads ad that you need to close.
///
- (void)didCloseWithAd:(TeadsAd * _Nonnull)ad;
/// Called when the Teads SDK has recorded an impression for an ad.
/// \param ad The ad on which an impression has occurred.
///
- (void)didRecordImpressionWithAd:(TeadsAd * _Nonnull)ad;
/// Called when Teads has recorded a clickthrough on an ad.
/// \param ad The ad on which a click has occurred.
///
- (void)didRecordClickWithAd:(TeadsAd * _Nonnull)ad;
/// Called when an ad is shown in fullscreen.
/// \param ad The ad that is shown in fullscreen.
///
- (void)didExpandedToFullscreenWithAd:(TeadsAd * _Nonnull)ad;
/// Called when an ad leaves the fullscreen mode.
/// \param ad The ad that leaved the fullscreen mode.
///
- (void)didCollapsedFromFullscreenWithAd:(TeadsAd * _Nonnull)ad;
/// Called when an ad is terminated (deinit)
/// \param identifier The ad request identifier
///
- (void)didTerminateWithRequestIdentifier:(NSUUID * _Nonnull)requestIdentifier;
@end

/// adOpportunity is a key metrics to evaluate the performance of your inventory.
/// It builds the visibility score of your placement in publisher dashboards.
/// note:
/// It is mandatory to implement it, a bad visibility measurement will impact your placement fill rate.
/// To do so: add this view just above your slot, when visibility is tracked, this view will be removed from superview automaically
SWIFT_CLASS("_TtC8TeadsSDK29TeadsAdOpportunityTrackerView")
@interface TeadsAdOpportunityTrackerView : UIView
/// Request identifier allows you to match the returned value from placement.requestAd call
@property (nonatomic, readonly, copy) NSUUID * _Nullable requestIdentifier;
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)_ SWIFT_UNAVAILABLE;
- (void)removeFromSuperview;
@end

SWIFT_PROTOCOL("_TtP8TeadsSDK16TeadsAdPlacement_")
@protocol TeadsAdPlacement
/// Your Teads placement identifier for <em>inRead</em> or <em>native</em> ads
/// note:
/// no use for <code>TeadsPrebidAdPlacement</code>
@property (nonatomic, readonly) NSInteger pid;
@end

/// Log delegate enabling you to route every log message written in console into a dedicated area of your choice
SWIFT_PROTOCOL("_TtP8TeadsSDK23TeadsLogMessageDelegate_")
@protocol TeadsLogMessageDelegate
@optional
/// Called each time TeadsSDK triggers a log message
/// \param message log message
///
/// \param note If no subscribers is set, log message will be written into console
///
- (void)didLogMessageWithMessage:(NSString * _Nonnull)message;
@end

/// Root placement delegate methods needed to follow Teads ad requests flow
SWIFT_PROTOCOL("_TtP8TeadsSDK24TeadsAdPlacementDelegate_")
@protocol TeadsAdPlacementDelegate <TeadsLogMessageDelegate>
/// Called when the Teads SDK has not received an ad, the reason will be detailled in the parameter
/// \param reason an object that contains the fail reason
///
- (void)didFailToReceiveAdWithReason:(AdFailReason * _Nonnull)reason;
/// Called when the Teads SDK has a tracker view to provide you. You have to place it where your ad slot is. It will be used to help monitor your inventory.
/// \param trackerView the view that will monitor your inventory
///
- (void)adOpportunityTrackerViewWithTrackerView:(TeadsAdOpportunityTrackerView * _Nonnull)trackerView;
@end

/// Specify which settings you want to set for your Teads placement.
/// Those settings will be persisted for the entire placement lifecycle.
SWIFT_CLASS("_TtC8TeadsSDK24TeadsAdPlacementSettings")
@interface TeadsAdPlacementSettings : NSObject
/// <em>Teads Crash Monitoring</em> is a tool we use to monitor crashes that may occur ONLY IN OUR SDK.
/// This tool is really helpful for us and it aims to improve our product continuously.
/// Prevent TeadsSDK to automatically handle/monitor crashes
/// note:
/// TeadsSDK does not disturb any third party crash handler/reporter such as Crashlytics
- (void)disableCrashMonitoring;
/// By default, the Teads SDK handles the audio session by setting its category to ambient.
/// This means that all the audio played by other apps will be simply mixed with the ad sound.
/// note:
/// If you chose to handle the audio session by yourself you need to call <code>disableTeadsAudioSessionManagement</code> and implement  <code>TeadsPlaybackDelegate</code>
- (void)disableTeadsAudioSessionManagement;
/// Enable all TeadsSDK Log for debugging purpose
/// warning:
/// Remember to remove this setting when you are going in production
- (void)enableDebug;
- (void)disableLocation SWIFT_DEPRECATED_MSG("TeadsSDK does not record location.");
- (void)enableLightEndScreen SWIFT_DEPRECATED_MSG("Won't be used in any newer SDK versions.");
/// To improve performances and user experience, media such as videos or images are preloaded.
/// This setting prevents TeadsSDK from automatically preloading media.
- (void)disableMediaPreload SWIFT_DEPRECATED_MSG("This is not used anymore and will be removed in a future version of the SDK");
/// In order to follow the IAB specifications for GDPR, please fill the following parameters with attention.
/// note:
/// If you use a <a href="https://iabeurope.eu/tcf-for-cmps/">CMP</a>, you can skip this step: CMP will store those parameters into <code>UserDefaults</code>, TeadSDK will automatically retrieve these values. <a href="https://github.com/InteractiveAdvertisingBureau/GDPR-Transparency-and-Consent-Framework/blob/master/TCFv2/IAB%20Tech%20Lab%20-%20CMP%20API%20v2.md">GDPR Transparency and Consent Framework </a> IAB documentation.
/// \param subjectToGDPR <code>"1"</code> if the traffic or the publisher is in the EEA (European Economic Area), <code>"0"</code> if it is not, <code>"null"</code> if it’s unknown.
///
/// \param consent Which vendors and purposes did the user give consent for.
///
/// \param tcfVersion Transparency and Consent Framework version.
///
/// \param cmpSdkID Consent Manager Platform unique identifier.
///
- (void)userConsentWithSubjectToGDPR:(NSString * _Nonnull)subjectToGDPR consent:(NSString * _Nonnull)consent tcfVersion:(enum TCFVersion)tcfVersion cmpSdkID:(NSInteger)cmpSdkID;
/// In order to follow the IAB specifications for CCPA, please fill the following parameters with attention.
/// note:
/// If you use a Content Management Platform, you can skip this step: CMP will store those parameters into <code>UserDefaults</code>, TeadSDK will automatically retrieve consent value. <a href="https://github.com/InteractiveAdvertisingBureau/USPrivacy/blob/master/CCPA/US%20Privacy%20String.md">CCPA</a> IAB documentation.
/// \param consent The CCPA consent string.
///
- (void)setUsPrivacyWithConsent:(NSString * _Nonnull)consent;
/// In order to follow the IAB specifications for GDPR, please fill the following parameters with attention.
/// note:
/// If you use a <a href="https://iabeurope.eu/tcf-for-cmps/">CMP</a>, you can skip this step: CMP will store those parameters into <code>UserDefaults</code>, TeadSDK will automatically retrieve these values. <a href="https://github.com/InteractiveAdvertisingBureau/Global-Privacy-Platform/blob/main/Core/Consent%20String%20Specification.md">Global Privacy Platform </a> IAB documentation.
/// \param consent Which vendors and purposes did the user give consent for.
///
/// \param sectionIds List of the applicable section ids.
///
- (void)setGppConsentWithConsent:(NSString * _Nonnull)consent sectionIds:(NSString * _Nonnull)sectionIds;
/// Prevent to automatically set UIDevice.current.isBatteryMonitoringEnabled
- (void)disableBatteryMonitoring;
/// Add extra informations to settings.
/// \param value Extra value.
///
/// \param key Extra key.
///
- (void)addExtras:(NSString * _Nonnull)value for:(NSString * _Nonnull)key;
/// Instance settings builder.
/// \param build Build your <code>AdPlacementSettings</code> from this closure.
///
- (nonnull instancetype)initWithBuild:(SWIFT_NOESCAPE void (^ _Nonnull)(TeadsAdPlacementSettings * _Nonnull))build OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

/// This class is used to help in resizing a given ad view to a given aspect ratio.
SWIFT_CLASS("_TtC8TeadsSDK12TeadsAdRatio")
@interface TeadsAdRatio : NSObject
/// The <code>zero</code> size ratio.
/// note:
/// empty 0:0 aspect ratio, internal purpose only
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong) TeadsAdRatio * _Nonnull zero;)
+ (TeadsAdRatio * _Nonnull)zero SWIFT_WARN_UNUSED_RESULT;
/// The default value for <code>TeadsAdRatio</code>
/// note:
/// usually 16:9 HDTV aspect ratio
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong, getter=default) TeadsAdRatio * _Nonnull default_;)
+ (TeadsAdRatio * _Nonnull)default SWIFT_WARN_UNUSED_RESULT;
/// Compute the best height for your TeadsInReadAdView with the given width.
/// \param width the width of your TeadsInReadAdView.
///
///
/// returns:
/// The calculated height that fit the creative aspect ratio.
- (CGFloat)calculateHeightForWidth:(CGFloat)width SWIFT_WARN_UNUSED_RESULT;
/// Get a CGFloat ratio for a given width.
/// You can use returned value to specify autolayout multiplier constraint.
/// \param width the width of your TeadsInReadAdView.
///
///
/// returns:
/// The ratio corresponding to the given width.
- (CGFloat)valueFor:(CGFloat)width SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

/// Specify which settings you want to set for the related ad request.
/// Those settings will be persisted for the ad lifecycle only.
SWIFT_CLASS("_TtC8TeadsSDK22TeadsAdRequestSettings")
@interface TeadsAdRequestSettings : NSObject
/// The Teads inApp Validation tool is the best way to ensure all basic features and prerequisites are correctly implemented.
/// It is also useful during integration iterations.
/// Each time you upgrade TeadsSDK versions, you should perfom a validation pass to ensure integration is set correctly.
/// warning:
/// Remember to remove this setting when you are going in production.
/// note:
/// Follow <a href="https://support.teads.tv/support/solutions/articles/36000314783-validation-tool">validate your integration documentation</a>
- (void)enableValidationMode;
/// Set the publisher http page url that matches the content where Teads Ad will be loaded.
/// Setting this value can significally improve fill-rate since contextual data can be inferred from the content behing url.
/// It’s perfectly suitable for news app or retail app as most of the app content is also available on a website: it allows us to have a more detailed brand safety article by article.
/// For non-news apps, this setting is optional.
/// \param urlString The content related page URL.
///
- (void)pageUrl:(NSString * _Nonnull)rawUrlString;
/// Add extra informations to settings.
/// Mediation adapters purpose only
/// \param value Extra value.
///
/// \param key Extra key.
///
- (void)addExtras:(NSString * _Nonnull)value for:(NSString * _Nonnull)key;
/// Instance settings builder.
/// \param build Build your <code>TeadsAdRequestSettings</code> from this closure.
///
- (nonnull instancetype)initWithBuild:(SWIFT_NOESCAPE void (^ _Nonnull)(TeadsAdRequestSettings * _Nonnull))build OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

/// Root view inherited by <code>TeadsInReadAdView</code> & <code>TeadsNativeAdView</code>
/// note:
/// Do not instanciate it by yourself, you should instanciate childs
SWIFT_CLASS("_TtC8TeadsSDK11TeadsAdView")
@interface TeadsAdView : UIView
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder OBJC_DESIGNATED_INITIALIZER;
@end

/// Never create your own TeadsAdapterIntegrationType directly. Use one of the predefined standard values.
SWIFT_CLASS("_TtC8TeadsSDK27TeadsAdapterIntegrationType")
@interface TeadsAdapterIntegrationType : NSObject
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@protocol TeadsMediatedAdViewDelegate;
/// Settings used to load Teads’ mediation adapter ads
/// Specify which setting you want to set for the related mediation request.
/// Those settings will be persisted for the ad lifecycle only.
/// Only relevant when using  adapter such as
/// <ul>
///   <li>
///     <a href="https://support.teads.tv/support/solutions/articles/36000314767-inread-google-ad-manager-and-admob-mediation">AdMob</a>
///   </li>
///   <li>
///     <a href="https://support.teads.tv/support/solutions/articles/36000357700-inread-applovin-mediation">AppLovin</a>
///   </li>
///   <li>
///     <a href="https://support.teads.tv/support/solutions/articles/36000314771-smart-adserver-mediation-inread">Smart Ad Server</a>
///   </li>
///   <li>
///     <a href="https://support.teads.tv/support/solutions/articles/3600031477136000459748">Prebid</a>
///   </li>
/// </ul>
SWIFT_CLASS("_TtC8TeadsSDK20TeadsAdapterSettings")
@interface TeadsAdapterSettings : NSObject
/// Convenient way to specify ability to resize in settings
- (void)subscribeToAdResizing;
/// A value describing the native ad media scale that is being used.
/// This is only relevant for native ad.
@property (nonatomic, readonly) enum MediaScale mediaScale;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// Instance settings builder
/// \param build closure to tune settings
///
- (nonnull instancetype)initWithBuild:(SWIFT_NOESCAPE void (^ _Nonnull)(TeadsAdapterSettings * _Nonnull))build OBJC_DESIGNATED_INITIALIZER;
/// <em>Teads Crash Monitoring</em> is a tool we use to monitor crashes that may occur ONLY IN OUR SDK.
/// This tool is really helpful for us and it aims to improve our product continuously.
/// Prevent TeadsSDK to automatically handle/monitor crashes
/// note:
/// TeadsSDK does not disturb any third party crash handler/reporter such as Crashlytics
- (void)disableCrashMonitoring;
/// By default, the Teads SDK handles the audio session by setting its category to ambient.
/// This means that all the audio played by other apps will be simply mixed with the ad sound.
/// note:
/// If you chose to handle the audio session by yourself you need to call <code>disableTeadsAudioSessionManagement</code> and implement  <code>TeadsPlaybackDelegate/adStartPlayingAudio(_:)</code> & <code>TeadsPlaybackDelegate/adStopPlayingAudio(_:)</code>
- (void)disableTeadsAudioSessionManagement;
- (void)disableLocation SWIFT_DEPRECATED_MSG("TeadsSDK does not record location.");
- (void)enableLightEndScreen SWIFT_DEPRECATED_MSG("Won't be used in any newer SDK versions.");
/// To improve performances and user experience, media such as videos or images are preloaded.
/// This setting prevents TeadsSDK from automatically preloading media.
- (void)disableMediaPreload SWIFT_DEPRECATED_MSG("This is not used anymore and will be removed in a future version of the SDK");
/// In order to follow the IAB specifications for GDPR, please fill the following parameters with attention.
/// note:
/// If you use a <a href="https://iabeurope.eu/tcf-for-cmps/">CMP</a>, you can skip this step: CMP will store those parameters into <code>UserDefaults</code>, TeadSDK will automatically retrieve these values. <a href="https://github.com/InteractiveAdvertisingBureau/GDPR-Transparency-and-Consent-Framework/blob/master/TCFv2/IAB%20Tech%20Lab%20-%20CMP%20API%20v2.md">GDPR Transparency and Consent Framework </a> IAB documentation.
/// \param subjectToGDPR <code>"1"</code> if the traffic or the publisher is in the EEA (European Economic Area), <code>"0"</code> if it is not, <code>"null"</code> if it’s unknown.
///
/// \param consent Which vendors and purposes did the user give consent for.
///
/// \param tcfVersion Transparency and Consent Framework version.
///
/// \param cmpSdkID Consent Manager Platform unique identifier.
///
- (void)userConsentWithSubjectToGDPR:(NSString * _Nonnull)subjectToGDPR consent:(NSString * _Nonnull)consent tcfVersion:(enum TCFVersion)tcfVersion cmpSdkID:(NSInteger)cmpSdkID;
/// In order to follow the IAB specifications for CCPA, please fill the following parameters with attention.
/// requires:
/// consent US Privacy string value should be formated following <a href="https://github.com/InteractiveAdvertisingBureau/USPrivacy/blob/master/CCPA/US%20Privacy%20String.md#us-privacy-string-format">IAB specifications</a>
/// note:
/// If you use a Content Management Platform, you can skip this step: CMP will store those parameters into <code>UserDefaults</code>, TeadSDK will automatically retrieve consent value. <a href="https://github.com/InteractiveAdvertisingBureau/USPrivacy/blob/master/CCPA/US%20Privacy%20String.md">CCPA</a> IAB documentation.
/// \param consent The CCPA consent string
///
- (void)setUsPrivacyWithConsent:(NSString * _Nonnull)consent;
/// In order to follow the IAB specifications for GPP, please fill the following parameters with attention.
/// note:
/// If you use a <a href="https://iabeurope.eu/tcf-for-cmps/">CMP</a>, you can skip this step: CMP will store those parameters into <code>UserDefaults</code>, TeadSDK will automatically retrieve these values. <a href="https://github.com/InteractiveAdvertisingBureau/Global-Privacy-Platform/blob/main/Core/Consent%20String%20Specification.md">Global Privacy Platform </a> IAB documentation.
/// \param consent Which vendors and purposes did the user give consent for.
///
/// \param sectionIds List of the applicable section ids.
///
- (void)setGppConsentWithConsent:(NSString * _Nonnull)consent sectionIds:(NSString * _Nonnull)sectionIds;
/// Prevent to automatically set UIDevice.current.isBatteryMonitoringEnabled
- (void)disableBatteryMonitoring;
/// Add extra informations to settings.
/// note:
/// for Adapater scope mainly
/// \param value Extra value.
///
/// \param key Extra key.
///
- (void)addExtras:(NSString * _Nonnull)value for:(NSString * _Nonnull)key;
/// Enable all TeadsSDK Log for debugging purpose
/// warning:
/// Remember to remove this setting when you are going in production
- (void)enableDebug;
/// The Teads inApp Validation tool is the best way to ensure all basic features and prerequisites are correctly implemented.
/// It is also useful during integration iterations.
/// warning:
/// Remember to remove this setting when you are going in production.
/// note:
/// Follow <a href="https://support.teads.tv/support/solutions/articles/36000314783-validation-tool">validate your integration documentation</a>
- (void)enableValidationMode;
/// Set the publisher http page url that matches the content where Teads Ad will be loaded.
/// requires:
/// urlsString value should be a valid reachable URL mathing slot neighbor content
/// \param urlString The content related page URL.
///
- (void)pageUrl:(NSString * _Nonnull)urlString;
/// Set the native media view scale.
/// important:
/// This setting only apply for native ads.
/// \param mediaScale The media scale.
///
- (void)setMediaScale:(enum MediaScale)mediaScale;
- (BOOL)subscribeAdResizeDelegate:(id <TeadsMediatedAdViewDelegate> _Nonnull)delegate forAdView:(UIView * _Nonnull)adView error:(NSError * _Nullable * _Nullable)error SWIFT_DEPRECATED_MSG("", "registerAdView:delegate:");
/// Register the ad view in case of mediation adapter.
/// In order to perform ad resizing you need to register AdView with a <code>delegate</code>
/// implementing <code>TeadsMediatedAdViewDelegate/didUpdateRatio(_:adRatio:)</code> will allows you to resize the  AdView
/// \param adView slot view returned by Mediation actor
///
/// \param delegate TeadsMediatedAdViewDelegate to update adView slot size
///
///
/// throws:
/// Error is thrown if the <code>adView</code> parameter supplied is not a subclass of Mediation third-party networks like Admob or AppLovin
- (void)registerAdView:(UIView * _Nonnull)adView delegate:(id <TeadsMediatedAdViewDelegate> _Nonnull)delegate;
@end

@interface TeadsAdapterSettings (SWIFT_EXTENSION(TeadsSDK))
/// Return a dictionary representation of the current TeadsAdSettings object.
///
/// returns:
/// A <code>[AnyHashable: Any]</code> representing the object.
- (NSDictionary * _Nullable)toDictionaryAndReturnError:(NSError * _Nullable * _Nullable)error SWIFT_WARN_UNUSED_RESULT;
/// Create an instance from <code>[AnyHashable: Any]</code>
/// \param dictionary representation of TeadsAdSettings instance
///
///
/// returns:
/// A <code>TeadsAdapterSettings</code> object instance.
+ (TeadsAdapterSettings * _Nullable)instanceFrom:(NSDictionary * _Nonnull)dictionary error:(NSError * _Nullable * _Nullable)error SWIFT_WARN_UNUSED_RESULT;
/// Specify integration type and version
/// When using mediation adapters or plugin, provide a integration data to monitor them
/// important:
/// Adapters internal purpose only
- (void)setIntegrationWithType:(TeadsAdapterIntegrationType * _Nonnull)integration version:(NSString * _Nonnull)version;
@end

/// A TeadsInReadAd represents an InRead ad that will be binded to a <code>TeadsInReadAdView</code> instance
/// This instance is returned through <code>TeadsInReadAdPlacementDelegate/didReceiveAd(ad:adRatio:)</code>
/// note:
/// you need use <code>TeadsInReadAdView</code> to bind a <code>TeadsInReadAd</code>
SWIFT_CLASS("_TtC8TeadsSDK13TeadsInReadAd")
@interface TeadsInReadAd : TeadsAd
@end

@interface TeadsInReadAd (SWIFT_EXTENSION(TeadsSDK))
/// adRatio to correctly display ad
/// note:
/// call  <code>TeadsAdRatio/calculateHeight(for:)</code> to obtain optimal height to better fit ad size
@property (nonatomic, readonly, strong) TeadsAdRatio * _Nonnull adRatio;
@end

/// InRead ad placement to request inRead ads
/// This object is reponsible for performing request and is tied to you PID (placement identifier)
/// In order to create placement, call <code>Teads/createInReadPlacement(pid:settings:delegate:)</code>
/// important:
/// You must own/retain <code>TeadsInReadAdPlacement</code> instance, otherwise ads could not be delivered properly
/// note:
/// See <a href="https://support.teads.tv/support/solutions/articles/36000314722-inread-classic-integration">InRead implementation guide</a> documentation
SWIFT_PROTOCOL("_TtP8TeadsSDK22TeadsInReadAdPlacement_")
@protocol TeadsInReadAdPlacement <TeadsAdPlacement>
/// TeadsInReadAdPlacementDelegate to follow ad placement lifecycle
@property (nonatomic, strong) id <TeadsInReadAdPlacementDelegate> _Nullable delegate;
/// Request an InRead ad on this placement
/// listen for events by implementing <code>TeadsInReadAdPlacementDelegate</code>
/// requires:
/// <code>TeadsInReadAdPlacement/delegate</code> property must be set to perform ad request, otherwise didReceiveAd will not be triggered
/// \param requestSettings settings <code>TeadsInReadAdRequestSettings</code> to tweak your needs
///
///
/// returns:
/// a unique request identifier, this identifier will be the same value of <code>TeadsInReadAd.requestIdentifier</code> property
- (NSUUID * _Nonnull)requestAdWithRequestSettings:(TeadsAdRequestSettings * _Nonnull)requestSettings;
@end

/// Delegate methods needed to follow Teads inRead ad requests flow
SWIFT_PROTOCOL("_TtP8TeadsSDK30TeadsInReadAdPlacementDelegate_")
@protocol TeadsInReadAdPlacementDelegate <TeadsAdPlacementDelegate>
/// Called when the Teads SDK has received an ad for you to display
/// \param ad The teadsAd object
///
/// \param adRatio an object that will help you display the ad correctly
///
- (void)didReceiveAdWithAd:(TeadsInReadAd * _Nonnull)ad adRatio:(TeadsAdRatio * _Nonnull)adRatio;
/// Called when the Teads SDK needs you to resize your adView the creative inform us of its new ratio
/// When it called it is the right place to update your view ratio. A basic implementation may look litke this:
/// \code
/// func didUpdateRatio(ad: TeadsInReadAd, adRatio: TeadsAdRatio) {
///     yourViewHeight = adRatio.calculateHeight(for: yourViewWidth)
/// }
///
/// \endcodeAlternatively you can call <code>adRatio.value(for:)</code> to set multiplier constraint
/// \code
/// func didUpdateRatio(ad: TeadsInReadAd, adRatio: TeadsAdRatio) {
///     let multiplier = adRatio.value(for: yourViewWidth)
///     // create constaint with `multiplier and replace it with exisiting one
/// }
///
/// \endcode\param ad The teadsAd object
///
/// \param adRatio an object that will help you display the ad correctly
///
- (void)didUpdateRatioWithAd:(TeadsInReadAd * _Nonnull)ad adRatio:(TeadsAdRatio * _Nonnull)adRatio;
@end

@class UIWindow;
/// The Teads inRead ad view is responsible to manage a Teads inRead ad.
SWIFT_CLASS("_TtC8TeadsSDK17TeadsInReadAdView")
@interface TeadsInReadAdView : TeadsAdView
- (void)willMoveToWindow:(UIWindow * _Nullable)newWindow;
- (void)didMoveToWindow;
/// Call this to bind an inRead ad to your inRead ad view.
/// important:
/// This call is mandatory in order render UI of <code>TeadsInReadAdView</code>
/// \param ad The ad that should be binded to the ad view.
///
- (void)bind:(TeadsInReadAd * _Nonnull)ad;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
- (void)layoutSubviews;
@end

@class VideoComponent;
/// The TeadsMediaView can load either images, videos and VPAID content.
/// Implement it to render media component content using <code>TeadsMediaView/bind(component:)</code>
/// <ul>
///   <li>
///     <code>ImageComponent</code>
///   </li>
///   <li>
///     <code>VideoComponent</code>
///   </li>
/// </ul>
SWIFT_CLASS("_TtC8TeadsSDK14TeadsMediaView")
@interface TeadsMediaView : UIView
/// When dealing with VideoComponent, it needs to be rendered using TeadsMediaView
- (nonnull instancetype)initWithVideoComponent:(VideoComponent * _Nonnull)videoComponent OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder SWIFT_UNAVAILABLE;
- (void)layoutSubviews;
- (void)bindWithComponent:(CommonComponent * _Nullable)component;
@end

/// When using mediation adapters on inRead placement you must register your view in order to monitor and perform resize updates
SWIFT_PROTOCOL("_TtP8TeadsSDK27TeadsMediatedAdViewDelegate_")
@protocol TeadsMediatedAdViewDelegate
/// Called when the ad ratio is udpated. (only for mediation)
/// \param adView The adView in which the ad is being played.
///
/// \param adRatio The ratio you should use to update your adView height.
///
- (void)didUpdateRatio:(UIView * _Nonnull)adView adRatio:(TeadsAdRatio * _Nonnull)adRatio;
@end

/// A TeadsNativeAd represents an ad that will be displayed by the native code of the application. This ad is fully customizable
/// You should register your class (typically a UIViewController) to <code>delegate</code> conforming to <code>TeadsAdDelegate</code> in order to follow ad lifecycle
/// warning:
/// Contrary to the <code>TeadsInReadAd</code> object, the <code>TeadsNativeAd</code> only contains information that needs to be displayed.
/// It does not create any view for the actual display: your application is responsible of the ad rendering.
/// We strongly advise you to use <code>TeadsNativeAdView</code> to bind ad <code>TeadsNativeAd</code>
SWIFT_CLASS("_TtC8TeadsSDK13TeadsNativeAd")
@interface TeadsNativeAd : TeadsAd
/// Ad’s title
/// note:
/// contains ``CommonComponent/text` String property
@property (nonatomic, readonly, strong) CommonComponent * _Nullable title;
/// Ad’s main content / body
/// Descriptive text associated with the product or service being advertised
/// note:
/// <code>CommonComponent/text</code> String property reprensent large description of ad
@property (nonatomic, readonly, strong) CommonComponent * _Nullable content;
/// Main image element of ad, usually corresponds to main media content
/// Large image preview for the ad
/// note:
/// <code>ImageComponent/url</code> property
/// note:
/// you can call <code>ImageComponent/loadImage(async:success:failure:)</code> to get <code>UImage</code>
@property (nonatomic, readonly, strong) ImageComponent * _Nullable image;
/// Icon should contain icon
/// note:
/// <code>ImageComponent/url</code> property
/// note:
/// you can call <code>ImageComponent/loadImage(async:success:failure:)</code> to get <code>UImage</code>
@property (nonatomic, readonly, strong) ImageComponent * _Nullable icon;
/// Sponsored may contain the brand name of the sponsor / advertiser.
/// note:
/// <code>CommonComponent/text</code> String property represents brand name value
@property (nonatomic, readonly, strong) CommonComponent * _Nullable sponsored;
/// Text describing a ‘call to action’ button for destination URL
/// note:
/// <code>CommonComponent/text</code> String property represents the action that will be made when the ad is clicked: for instance ‘Learn more’ or ‘Buy now’.
@property (nonatomic, readonly, strong) CommonComponent * _Nullable callToAction;
/// Represent multimedia component, should be used in conjonction with <code>TeadsMediaView</code>
/// note:
/// contains <code>VideoComponent/contentAspectRatio</code> CGFloat property
@property (nonatomic, readonly, strong) VideoComponent * _Nullable video;
/// Rating of the product being offered to the user
/// note:
/// <code>CommonComponent/text</code> String property represents float rating value
@property (nonatomic, readonly, strong) CommonComponent * _Nullable rating;
/// Price for product / app / in-app purchase
/// note:
/// <code>CommonComponent/text</code> String property represents price value including currency symbol in localised format
@property (nonatomic, readonly, strong) CommonComponent * _Nullable price;
/// Teads’ AdChoices element
/// note:
/// <code>AdChoicesComponent/clickThroughUrl</code> property represents advertiser’s url
@property (nonatomic, readonly, strong) AdChoicesComponent * _Nullable adChoices;
/// register containerView
/// note:
/// this should be called on adapter part or without interface builder
/// \param view view containing UI elements defined in  ``TeadsNativeAdView`
///
- (void)registerWithContainerView:(UIView * _Nonnull)containerView;
@end

@protocol TeadsNativeAdPlacementDelegate;
/// Native ad placement to request native ads
/// From instance reponsible for performing request and is tied to you PID (placement identifier)
/// In order to create placement, call <code>Teads/createNativePlacement(pid:settings:delegate:)</code>
/// important:
/// You must own/retain <code>TeadsNativeAdPlacement</code> instance, otherwise ads could not be delivered properly
/// note:
/// See <a href="https://support.teads.tv/support/solutions/articles/36000314757-native-ad-classic-integration">Native implementation guide</a> documentation
SWIFT_PROTOCOL("_TtP8TeadsSDK22TeadsNativeAdPlacement_")
@protocol TeadsNativeAdPlacement <TeadsAdPlacement>
/// TeadsNativeAdPlacementDelegate to follow ad placement lifecycle
@property (nonatomic, strong) id <TeadsNativeAdPlacementDelegate> _Nullable delegate;
/// Request a native ad on this placement
/// listen for events by implementing <code>TeadsNativeAdPlacementDelegate</code>
/// requires:
/// <code>TeadsNativeAdPlacement/delegate</code> property must be set to perform ad request, otherwise didReceiveAd will not be triggered
/// \param requestSettings settings <code>TeadsNativeAdRequestSettings</code> to tweak your needs
///
///
/// returns:
/// a unique request identifier, this identifier will be the same value of TeadsNativeAd requestIdentifier property
- (NSUUID * _Nonnull)requestAdWithRequestSettings:(TeadsAdRequestSettings * _Nonnull)requestSettings;
@end

/// Delegate methods needed to follow Teads native ad requests flow
SWIFT_PROTOCOL("_TtP8TeadsSDK30TeadsNativeAdPlacementDelegate_")
@protocol TeadsNativeAdPlacementDelegate <TeadsAdPlacementDelegate>
/// Called when the Teads SDK has received an ad for you to display
/// \param ad The teadsAd object
///
/// \param adRatio an object that will help you display the ad correctly
///
- (void)didReceiveAdWithAd:(TeadsNativeAd * _Nonnull)ad;
@end

@class UILabel;
@class UIImageView;
@class UIButton;
/// The Teads native ad view is responsible to manage a Teads native ad.
SWIFT_CLASS("_TtC8TeadsSDK17TeadsNativeAdView")
@interface TeadsNativeAdView : TeadsAdView
/// The native ad title label.
@property (nonatomic, strong) IBOutlet UILabel * _Nullable titleLabel;
/// The native ad content / body / description label.
@property (nonatomic, strong) IBOutlet UILabel * _Nullable contentLabel;
/// The native ad media view (for images and videos).
@property (nonatomic, strong) IBOutlet TeadsMediaView * _Nullable mediaView;
/// The native ad icon / logo image view.
/// Contenet usually corresponds to brand logo
@property (nonatomic, strong) IBOutlet UIImageView * _Nullable iconImageView;
/// The native ad advertiser / sponsored label.
/// /// Content usually corresponds to brand name
@property (nonatomic, strong) IBOutlet UILabel * _Nullable advertiserLabel;
/// The native ad call to action button.
/// e.g: <code>"Shop now!"</code>
@property (nonatomic, strong) IBOutlet UIButton * _Nullable callToActionButton;
/// The native ad rating view.
@property (nonatomic, strong) IBOutlet UIView * _Nullable ratingView;
/// The native ad price label.
@property (nonatomic, strong) IBOutlet UILabel * _Nullable priceLabel;
/// Call this function to bind a native ad to your native ad view.
/// important:
/// This call is mandatory in order to monitor ad viewability of each components
/// \param ad The ad that should be binded to the ad view.
///
- (void)bind:(TeadsNativeAd * _Nonnull)ad;
/// Binds the native asset ad views to this native ad using view tags binder
/// Specify a unique <code>tag</code> value for each UI element on InterfaceBuilder: make sure to match them using builder
/// \code
/// adView.bind(ad) { builder in
///     builder.titleLabelTag = 1
///     builder.contentLabelTag = 2
///     builder.mediaViewTag = 3
///     builder.iconImageViewTag = 4
///     builder.callToActionButtonTag = 5
///     builder.advertiserLabelTag = 6
/// }
///
/// \endcode\param ad The ad that should be binded to the ad view.
///
/// \param tagBinder Binds the native asset ad views to this native ad using view tags.
///
- (void)bind:(TeadsNativeAd * _Nonnull)ad tagBinder:(SWIFT_NOESCAPE void (^ _Nonnull)(TagBinderBuilder * _Nonnull))tagBinder;
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder OBJC_DESIGNATED_INITIALIZER;
@end

/// Delegate methods sending informations about Teads ads playback states.
SWIFT_PROTOCOL("_TtP8TeadsSDK21TeadsPlaybackDelegate_")
@protocol TeadsPlaybackDelegate
@optional
/// Called when an ad starts playing audio.
/// \param ad The ad that has started playing audio.
///
- (void)adStartPlayingAudio:(TeadsAd * _Nonnull)ad;
/// Called when an ad stops playing audio.
/// \param ad The ad that has stopped playing audio.
///
- (void)adStopPlayingAudio:(TeadsAd * _Nonnull)ad;
/// Called when an ad has started or resumed.
/// \param ad The ad that has played or resumed.
///
- (void)didPlay:(TeadsAd * _Nonnull)ad;
/// Called when an ad has been paused.
/// \param ad The ad that has been paused.
///
- (void)didPause:(TeadsAd * _Nonnull)ad;
/// Called when an ad has ended.
/// \param ad The ad that has ended.
///
- (void)didComplete:(TeadsAd * _Nonnull)ad;
@end

/// / Prebid ad placement to load inRead ads from Prebid winning bid
/// This object is reponsible of loading prebid winning ad response
/// In order to create placement, call <code>Teads/createPrebidPlacement(settings:delegate:)</code>
/// important:
/// You must own/retain <code>TeadsPrebidAdPlacement</code> instance, otherwise ads could not be delivered properly
SWIFT_PROTOCOL("_TtP8TeadsSDK22TeadsPrebidAdPlacement_")
@protocol TeadsPrebidAdPlacement <TeadsAdPlacement>
/// TeadsInReadAdPlacementDelegate to follow ad placement lifecycle
@property (nonatomic, strong) id <TeadsInReadAdPlacementDelegate> _Nullable delegate;
/// Load an InRead ad on this placement by passing adResponse value
/// listen for events by implementing <code>TeadsInReadAdPlacementDelegate</code>
/// requires:
/// <code>TeadsPrebidAdPlacement/delegate</code> property must be set to perform ad request, otherwise didReceiveAd will not be triggered
/// \param adResponse Prebid winning bid ad response string representation (stringified JSON)
///
/// \param requestSettings settings <code>TeadsInReadAdRequestSettings</code> to tweak your needs
///
///
/// returns:
/// a unique load identifier, this identifier will be the same value of <code>TeadsInReadAd.requestIdentifier</code> property
- (NSUUID * _Nonnull)loadAdWithAdResponse:(NSString * _Nonnull)adResponse requestSettings:(TeadsAdRequestSettings * _Nonnull)requestSettings;
/// get prebid request data
/// requires:
/// <code>TeadsPrebidAdPlacement/delegate</code> property must be set to perform ad request, otherwise didReceiveAd will not be triggered
/// \param requestSettings settings <code>TeadsInReadAdRequestSettings</code> to tweak your needs
///
///
/// throws:
/// error when not able to gather data
- (NSDictionary * _Nullable)getDataWithRequestSettings:(TeadsAdRequestSettings * _Nonnull)requestSettings error:(NSError * _Nullable * _Nullable)error;
@end

/// Delegate methods sending informations about Teads ads sound states.
SWIFT_PROTOCOL("_TtP8TeadsSDK18TeadsSoundDelegate_") SWIFT_UNAVAILABLE_MSG("'TeadsSoundDelegate' has been renamed to '_TtP8TeadsSDK21TeadsPlaybackDelegate_': Use TeadsPlaybackDelegate instead")
@protocol TeadsSoundDelegate
/// Called when an ad starts playing audio.
/// \param ad The ad that starts playing audio.
///
- (void)adStartPlayingAudio:(TeadsAd * _Nonnull)ad;
/// Called when an ad stops playing audio.
/// \param ad The ad that stops playing audio.
///
- (void)adStopPlayingAudio:(TeadsAd * _Nonnull)ad;
@end

@interface UIButton (SWIFT_EXTENSION(TeadsSDK))
- (void)bindWithComponent:(CommonComponent * _Nullable)component;
@end

@interface UIImageView (SWIFT_EXTENSION(TeadsSDK))
- (void)bindWithComponent:(CommonComponent * _Nullable)component;
@end

@interface UILabel (SWIFT_EXTENSION(TeadsSDK))
- (void)bindWithComponent:(CommonComponent * _Nullable)component;
@end

@interface UIView (SWIFT_EXTENSION(TeadsSDK))
/// map your UIKit element to TeadsSDK logic,
/// this ensures visibility measurement is monitored and click behaviors are well handled
/// \param component object holding text, image or video depending on his subtype
///
- (void)bindWithComponent:(CommonComponent * _Nullable)component;
@end

/// Native video component containing media content
/// note:
/// In order to render VideoComponent, you need to instanciate a <code>TeadsMediaView</code> by calling <code>TeadsMediaView/init(videoComponent:)</code>
SWIFT_CLASS("_TtC8TeadsSDK14VideoComponent")
@interface VideoComponent : CommonComponent
/// Media content aspect ratio (width/height).
@property (nonatomic, readonly) CGFloat contentAspectRatio;
@end

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

#elif defined(__x86_64__) && __x86_64__
// Generated by Apple Swift version 6.1.2 effective-5.10 (swiftlang-6.1.2.1.2 clang-1700.0.13.5)
#ifndef TEADSSDK_SWIFT_H
#define TEADSSDK_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 unsigned char char8_t;
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 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="TeadsSDK",generated_declaration))), apply_to=any(function,enum,objc_interface,objc_category,objc_protocol))
# pragma pop_macro("any")
#endif

#if defined(__OBJC__)

/// Native Root Component
SWIFT_CLASS("_TtC8TeadsSDK15CommonComponent")
@interface CommonComponent : NSObject
/// You should call it when view like Call to Action button is tapped
/// This will open link on SFSafariViewController or open directly an app depending on the link itself
- (void)didTapView;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

/// Native overlay component that could be put over playerView such as <em>AdChoices</em> or <em>ClickToAction</em>
/// note:
/// This component will be considered as friendly obstruction by our Third Party Viewability SDK (<a href="https://iabtechlab.com/standards/open-measurement-sdk/">Open Measurement</a>)
SWIFT_CLASS("_TtC8TeadsSDK16OverlayComponent")
@interface OverlayComponent : CommonComponent
@end

/// Native Component containing AdChoices <code>AdChoicesComponent/clickThroughUrl</code>
/// Teads is partner of DAA <a href="https://youradchoices.com/participating#CompanyT">Digital Advertising Alliance</a>
/// note:
/// AdChoices component and associated logo is automatically added to <code>TeadsNativeAdView</code>
SWIFT_CLASS("_TtC8TeadsSDK18AdChoicesComponent")
@interface AdChoicesComponent : OverlayComponent
@end

/// Enumeration of Teads’ error codes.
/// Error code is part of the <code>AdFailReason</code> object returned through placement delegate <code>TeadsAdPlacementDelegate/didFailToReceiveAd(reason:)</code>
/// You can switch over it in order to adapt logic regarding error case
typedef SWIFT_ENUM(NSInteger, AdErrorCode, open) {
/// When no slot exists for ad
  AdErrorCodeErrorNoSlot = 1,
/// Connectivity network issue
  AdErrorCodeErrorNetwork = 2,
/// AdServer does not responds with an ad
  AdErrorCodeErrorNotFilled = 3,
/// Ad parsing error
  AdErrorCodeErrorBadResponse = 4,
/// VAST error
/// note:
/// see <a href="https://wiki.iabtechlab.com/index.php?title=VAST_Error_Code_Troubleshooting_Matrix">IAB Error code matrix</a>
  AdErrorCodeErrorVastError = 5,
/// Placement Identifier is missing
  AdErrorCodeErrorUserIdMissing = 6,
/// Internal error
/// note:
/// some decoding or SDK internal components have failed
  AdErrorCodeErrorInternal = 7,
/// App (bundle identifier) has been disabled on purpose
/// note:
/// when some app version are corrupted, Teads disable thoses versions
  AdErrorCodeDisabledApp = 8,
/// Ad Request has returned an error
  AdErrorCodeErrorAdRequest = 9,
};

@class NSUUID;
@class NSString;
/// Error returned when ad request has failed. The failure is usually due to network
/// connectivity or ad availablility (i.e., no fill).
SWIFT_CLASS("_TtC8TeadsSDK12AdFailReason")
@interface AdFailReason : NSObject
/// Error code enumeration value
@property (nonatomic, readonly) enum AdErrorCode code;
/// Request identifier allows you to match with the returned value from <code>placement.requestAd()</code> call
@property (nonatomic, readonly, copy) NSUUID * _Null_unspecified requestIdentifier;
/// Contains <code>AdErrorCode</code> and error message, prefer use of <code>localizedDescription</code>
@property (nonatomic, readonly, copy) NSString * _Nonnull description;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

/// Native container component: represent the overall container of native ad view
SWIFT_CLASS("_TtC8TeadsSDK18ContainerComponent")
@interface ContainerComponent : CommonComponent
@end

@class UIImage;
/// Native image component containing image url
/// note:
/// Image data content is automatically pre-loaded, you can retrieve content using <code>ImageComponent/loadImage(async:success:failure:)</code>
SWIFT_CLASS("_TtC8TeadsSDK14ImageComponent")
@interface ImageComponent : CommonComponent
/// Loads Image data content asynchronously depending on the needs
/// warning:
/// specifying <code>async</code> parameter to false will block thread execution
/// note:
/// we strongly encourage to use this method to retrieve content and associate with <code>UIImageView</code>
/// \param async default value is true, image data loading will be performed asynchronously (very recommanded) otherwise the loading is performed synchronously (thread blocking)
///
/// \param success closure will be called once image data has been successfully loaded
///
/// \param failure failure will be called when image loading has failed: can fail for multiple reasong connectivity, resource unavailable, …
///
- (void)loadImageWithAsync:(BOOL)async success:(void (^ _Nullable)(UIImage * _Nonnull))success failure:(void (^ _Nullable)(NSError * _Nonnull))failure;
/// load Image synchronously, prefer using <code>ImageComponent/loadImage(async:success:failure:)</code> instead
/// warning:
/// this computed var is blocking thread execution in order to download image data.
@property (nonatomic, readonly, strong) UIImage * _Nullable image;
@end

/// A flag used to determine how TeadsMediaView lays out its content when its bounds change.
typedef SWIFT_ENUM(NSInteger, MediaScale, open) {
/// Contents scaled to fill with fixed aspect. some portion of content may be clipped.
/// Behaviour is similar to <code>UIView.ContentMode.scaleToFill</code>.
  MediaScaleScaleAspectFill = 0,
/// Contents scaled to fit with fixed aspect. remainder is transparent.
/// Behaviour is similar to <code>UIView.ContentMode.scaleAspectFit</code>.
  MediaScaleScaleAspectFit = 1,
};

/// EU Transparency & Consent Framework versions
/// note:
/// Europe  General Data Protection Regulation (GDPR) see <a href="https://iabeurope.eu/transparency-consent-framework/">Transparency Consent Framework</a>
typedef SWIFT_ENUM(NSInteger, TCFVersion, open) {
/// Version 1 of TCF
/// note:
/// No longer supported since 15 August 2020
  TCFVersionV1 = 1,
/// Version 2 of TCF
  TCFVersionV2 = 2,
};

/// This builder allows you to bind UI elements programmatically using <code>TeadsNativeAdView/bind(_:tagBinder:)</code>
SWIFT_CLASS("_TtC8TeadsSDK16TagBinderBuilder")
@interface TagBinderBuilder : NSObject
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
/// A non-zero tag for the title label view to be rendered. The maximum length will be 50 characters.
/// UIView element should be a <code>UILabel</code>
@property (nonatomic) NSInteger titleLabelTag;
/// A non-zero tag for content / body / description label view to be rendered. The maximum length will be 150 characters.
/// UIView element should be a ``UILabel```
@property (nonatomic) NSInteger contentLabelTag;
/// A non-zero tag for media content view to be rendered.
/// UIView element must be a <code>TeadsMediaView</code>
@property (nonatomic) NSInteger mediaViewTag;
/// A non-zero tag for icon image view to be rendered.
/// UIView element must be a <code>UIImageView</code>
@property (nonatomic) NSInteger iconImageViewTag;
/// A non-zero tag for advertiser label view to be rendered. The maximum length will be 25 characters.
/// UIView element should be a <code>UILabel</code>
@property (nonatomic) NSInteger advertiserLabelTag;
/// A non-zero tag for call to action button view to be rendered. The maximum length will be 15 characters.
/// UIView element should be a <code>UIButton</code>
@property (nonatomic) NSInteger callToActionButtonTag;
/// A non-zero tag for star rating content view to be rendered.
@property (nonatomic) NSInteger ratingViewTag;
/// A non-zero tag for price content view to be rendered.
/// UIView element should be a <code>UILabel</code>
@property (nonatomic) NSInteger priceLabelTag;
@end

@class TeadsAdPlacementSettings;
@protocol TeadsInReadAdPlacementDelegate;
@protocol TeadsInReadAdPlacement;
@protocol TeadsPrebidAdPlacement;
/// The <code>Teads</code> class defines the main entry point to start implementing TeadsSDK.
/// From this class you can statically create placements
/// <ul>
///   <li>
///     inRead: call <code>Teads/createInReadPlacement(pid:settings:delegate:)</code>
///   </li>
///   <li>
///     native: call <code>Teads/createNativePlacement(pid:settings:delegate:)</code>
///   </li>
/// </ul>
/// In order to increase TeadsSDK launch speed and load ads faster, we strongly suggest to call <code>Teads/configure()</code> into <code>AppDelegate.didFinishLaunchingWithOptions</code>
SWIFT_CLASS("_TtC8TeadsSDK5Teads")
@interface Teads : NSObject
/// Current Teads SDK Version value
/// Value is <a href="https://semver.org/">semver</a> format compliant
/// note:
/// This value does not rely anymore on <code>CFBundleShortVersionString</code> plist value since Xcode auto update all versions declared in plists with app bundle version value during archive process
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull sdkVersion;)
+ (NSString * _Nonnull)sdkVersion SWIFT_WARN_UNUSED_RESULT;
/// Create an inRead ad placement to request inRead ads
/// important:
/// You must own/retain <code>TeadsInReadAdPlacement</code> instance, otherwise ads could not be delivered properly: you can free placement instance on       <code>TeadsInReadAdPlacementDelegate/didReceiveAd(ad:adRatio:)</code> or  <code>TeadsAdPlacementDelegate/didFailToReceiveAd(reason:)</code>
/// note:
/// See <a href="https://support.teads.tv/support/solutions/articles/36000314722-inread-classic-integration">InRead implementation guide</a> documentation
/// \param pid Your Teads placement identifier for <em>inRead</em> ads
///
/// \param settings The placement’s related settings you want to apply
///
/// \param delegate TeadsInReadAdPlacementDelegate to follow ad placement lifecycle
///
///
/// returns:
/// TeadsInReadAdPlacement instance, this instance must be owned/retained
+ (id <TeadsInReadAdPlacement> _Nullable)createInReadPlacementWithPid:(NSInteger)pid settings:(TeadsAdPlacementSettings * _Nonnull)settings delegate:(id <TeadsInReadAdPlacementDelegate> _Nullable)delegate SWIFT_WARN_UNUSED_RESULT;
/// Create an  inRead ad placement to request load Prebid ad response
/// important:
/// You must own/retain <code>TeadsInReadAdPlacement</code> instance, otherwise ads could not be delivered properly: you can free placement instance on       <code>TeadsInReadAdPlacementDelegate/didReceiveAd(ad:adRatio:)</code> or  <code>TeadsAdPlacementDelegate/didFailToReceiveAd(reason:)</code>
/// note:
/// See <a href="https://support.teads.tv/support/solutions/articles/36000314722-inread-classic-integration">InRead implementation guide</a> documentation
/// \param settings The placement’s related settings you want to apply
///
/// \param delegate TeadsInReadAdPlacementDelegate to follow ad placement lifecycle
///
///
/// returns:
/// TeadsInReadAdPlacement instance, this instance must be owned/retained
+ (id <TeadsPrebidAdPlacement> _Nullable)createPrebidPlacementWithSettings:(TeadsAdPlacementSettings * _Nonnull)settings delegate:(id <TeadsInReadAdPlacementDelegate> _Nullable)delegate SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

@interface Teads (SWIFT_EXTENSION(TeadsSDK))
/// In order to increase TeadsSDK launch speed and load ads faster, call <code>Teads/configure()</code> into <code>AppDelegate.didFinishLaunchingWithOptions</code>
/// <em>Teads Crash Monitoring</em> is a tool we use to monitor crashes that may occur ONLY IN OUR SDK.
/// This tool is really helpful for us and it aims to improve our product  continuously.
/// You can disable the  crash monitoring feature by adding <code>disableCrashMonitoring()</code> in the TeadsAdPlacementSettings.
/// note:
/// TeadsSDK does not disturb any third party crash handler/reporter such as Crashlytics
/// warning:
/// To ensure the crash handler is ready to catch crashes you need to initialize Teads handler in <code>AppDelegate</code>
+ (void)configure;
@end

@protocol TeadsAdDelegate;
@protocol TeadsPlaybackDelegate;
/// Root Ad Object inherited by <code>TeadsInReadAd</code> & <code>TeadsNativeAd</code>
SWIFT_CLASS("_TtC8TeadsSDK7TeadsAd")
@interface TeadsAd : NSObject
/// Optional delegate object that receives state changes notifications from TeadsAd.
/// Usually this is a <code>UIViewController</code>.
@property (nonatomic, weak) id <TeadsAdDelegate> _Nullable delegate;
/// Optional delegate object that receives playback lifecycle changes notifications from TeadsAd.
/// Usually this is a <code>UIViewController</code>.
@property (nonatomic, weak) id <TeadsPlaybackDelegate> _Nullable playbackDelegate;
/// Request identifier allows you to match the returned value from <code>placement.requestAd</code> / <code>placement.loadAd</code> call
@property (nonatomic, readonly, copy) NSUUID * _Nonnull requestIdentifier;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@class NSCoder;
/// The Teads AdChoices view is responsible to render the optionView or AdChoices view.
/// Teads is partner of DAA <a href="https://youradchoices.com/participating#CompanyT">Digital Advertising Alliance</a>
SWIFT_CLASS("_TtC8TeadsSDK18TeadsAdChoicesView")
@interface TeadsAdChoicesView : UIView
- (nonnull instancetype)initWithBinding:(OverlayComponent * _Nullable)component OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)_ SWIFT_UNAVAILABLE;
- (nonnull instancetype)initWithFrame:(CGRect)frame SWIFT_UNAVAILABLE;
@end

@class UIViewController;
/// Delegate methods needed to follow Teads ads lifecycle.
SWIFT_PROTOCOL("_TtP8TeadsSDK15TeadsAdDelegate_")
@protocol TeadsAdDelegate
/// Called when an ad wants to present a view controller modally (e.g. safariViewController for call to action or the full screen controller).
/// note:
/// The event will not be triggered on the main thread.
/// \param ad The Teads ad related to the action.
///
///
/// returns:
/// The UIViewController on which we will present the content.
- (UIViewController * _Nullable)willPresentModalViewWithAd:(TeadsAd * _Nonnull)ad SWIFT_WARN_UNUSED_RESULT;
@optional
/// Called when the ad has encountered an issue, in this case you need to remove the slot or you will have a blank space.
/// \param ad The Teads ad that encountered an issue.
///
/// \param error The related error.
///
- (void)didCatchErrorWithAd:(TeadsAd * _Nonnull)ad error:(NSError * _Nonnull)error;
/// Called when the ad has been close, in this case you need to close the slot or you will have a blank space.
/// note:
/// Only relevant for <code>TeadsInReadAd</code>, you can remove the ``TeadsInReadAdView` from your super view.
/// \param ad The Teads ad that you need to close.
///
- (void)didCloseWithAd:(TeadsAd * _Nonnull)ad;
/// Called when the Teads SDK has recorded an impression for an ad.
/// \param ad The ad on which an impression has occurred.
///
- (void)didRecordImpressionWithAd:(TeadsAd * _Nonnull)ad;
/// Called when Teads has recorded a clickthrough on an ad.
/// \param ad The ad on which a click has occurred.
///
- (void)didRecordClickWithAd:(TeadsAd * _Nonnull)ad;
/// Called when an ad is shown in fullscreen.
/// \param ad The ad that is shown in fullscreen.
///
- (void)didExpandedToFullscreenWithAd:(TeadsAd * _Nonnull)ad;
/// Called when an ad leaves the fullscreen mode.
/// \param ad The ad that leaved the fullscreen mode.
///
- (void)didCollapsedFromFullscreenWithAd:(TeadsAd * _Nonnull)ad;
/// Called when an ad is terminated (deinit)
/// \param identifier The ad request identifier
///
- (void)didTerminateWithRequestIdentifier:(NSUUID * _Nonnull)requestIdentifier;
@end

/// adOpportunity is a key metrics to evaluate the performance of your inventory.
/// It builds the visibility score of your placement in publisher dashboards.
/// note:
/// It is mandatory to implement it, a bad visibility measurement will impact your placement fill rate.
/// To do so: add this view just above your slot, when visibility is tracked, this view will be removed from superview automaically
SWIFT_CLASS("_TtC8TeadsSDK29TeadsAdOpportunityTrackerView")
@interface TeadsAdOpportunityTrackerView : UIView
/// Request identifier allows you to match the returned value from placement.requestAd call
@property (nonatomic, readonly, copy) NSUUID * _Nullable requestIdentifier;
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)_ SWIFT_UNAVAILABLE;
- (void)removeFromSuperview;
@end

SWIFT_PROTOCOL("_TtP8TeadsSDK16TeadsAdPlacement_")
@protocol TeadsAdPlacement
/// Your Teads placement identifier for <em>inRead</em> or <em>native</em> ads
/// note:
/// no use for <code>TeadsPrebidAdPlacement</code>
@property (nonatomic, readonly) NSInteger pid;
@end

/// Log delegate enabling you to route every log message written in console into a dedicated area of your choice
SWIFT_PROTOCOL("_TtP8TeadsSDK23TeadsLogMessageDelegate_")
@protocol TeadsLogMessageDelegate
@optional
/// Called each time TeadsSDK triggers a log message
/// \param message log message
///
/// \param note If no subscribers is set, log message will be written into console
///
- (void)didLogMessageWithMessage:(NSString * _Nonnull)message;
@end

/// Root placement delegate methods needed to follow Teads ad requests flow
SWIFT_PROTOCOL("_TtP8TeadsSDK24TeadsAdPlacementDelegate_")
@protocol TeadsAdPlacementDelegate <TeadsLogMessageDelegate>
/// Called when the Teads SDK has not received an ad, the reason will be detailled in the parameter
/// \param reason an object that contains the fail reason
///
- (void)didFailToReceiveAdWithReason:(AdFailReason * _Nonnull)reason;
/// Called when the Teads SDK has a tracker view to provide you. You have to place it where your ad slot is. It will be used to help monitor your inventory.
/// \param trackerView the view that will monitor your inventory
///
- (void)adOpportunityTrackerViewWithTrackerView:(TeadsAdOpportunityTrackerView * _Nonnull)trackerView;
@end

/// Specify which settings you want to set for your Teads placement.
/// Those settings will be persisted for the entire placement lifecycle.
SWIFT_CLASS("_TtC8TeadsSDK24TeadsAdPlacementSettings")
@interface TeadsAdPlacementSettings : NSObject
/// <em>Teads Crash Monitoring</em> is a tool we use to monitor crashes that may occur ONLY IN OUR SDK.
/// This tool is really helpful for us and it aims to improve our product continuously.
/// Prevent TeadsSDK to automatically handle/monitor crashes
/// note:
/// TeadsSDK does not disturb any third party crash handler/reporter such as Crashlytics
- (void)disableCrashMonitoring;
/// By default, the Teads SDK handles the audio session by setting its category to ambient.
/// This means that all the audio played by other apps will be simply mixed with the ad sound.
/// note:
/// If you chose to handle the audio session by yourself you need to call <code>disableTeadsAudioSessionManagement</code> and implement  <code>TeadsPlaybackDelegate</code>
- (void)disableTeadsAudioSessionManagement;
/// Enable all TeadsSDK Log for debugging purpose
/// warning:
/// Remember to remove this setting when you are going in production
- (void)enableDebug;
- (void)disableLocation SWIFT_DEPRECATED_MSG("TeadsSDK does not record location.");
- (void)enableLightEndScreen SWIFT_DEPRECATED_MSG("Won't be used in any newer SDK versions.");
/// To improve performances and user experience, media such as videos or images are preloaded.
/// This setting prevents TeadsSDK from automatically preloading media.
- (void)disableMediaPreload SWIFT_DEPRECATED_MSG("This is not used anymore and will be removed in a future version of the SDK");
/// In order to follow the IAB specifications for GDPR, please fill the following parameters with attention.
/// note:
/// If you use a <a href="https://iabeurope.eu/tcf-for-cmps/">CMP</a>, you can skip this step: CMP will store those parameters into <code>UserDefaults</code>, TeadSDK will automatically retrieve these values. <a href="https://github.com/InteractiveAdvertisingBureau/GDPR-Transparency-and-Consent-Framework/blob/master/TCFv2/IAB%20Tech%20Lab%20-%20CMP%20API%20v2.md">GDPR Transparency and Consent Framework </a> IAB documentation.
/// \param subjectToGDPR <code>"1"</code> if the traffic or the publisher is in the EEA (European Economic Area), <code>"0"</code> if it is not, <code>"null"</code> if it’s unknown.
///
/// \param consent Which vendors and purposes did the user give consent for.
///
/// \param tcfVersion Transparency and Consent Framework version.
///
/// \param cmpSdkID Consent Manager Platform unique identifier.
///
- (void)userConsentWithSubjectToGDPR:(NSString * _Nonnull)subjectToGDPR consent:(NSString * _Nonnull)consent tcfVersion:(enum TCFVersion)tcfVersion cmpSdkID:(NSInteger)cmpSdkID;
/// In order to follow the IAB specifications for CCPA, please fill the following parameters with attention.
/// note:
/// If you use a Content Management Platform, you can skip this step: CMP will store those parameters into <code>UserDefaults</code>, TeadSDK will automatically retrieve consent value. <a href="https://github.com/InteractiveAdvertisingBureau/USPrivacy/blob/master/CCPA/US%20Privacy%20String.md">CCPA</a> IAB documentation.
/// \param consent The CCPA consent string.
///
- (void)setUsPrivacyWithConsent:(NSString * _Nonnull)consent;
/// In order to follow the IAB specifications for GDPR, please fill the following parameters with attention.
/// note:
/// If you use a <a href="https://iabeurope.eu/tcf-for-cmps/">CMP</a>, you can skip this step: CMP will store those parameters into <code>UserDefaults</code>, TeadSDK will automatically retrieve these values. <a href="https://github.com/InteractiveAdvertisingBureau/Global-Privacy-Platform/blob/main/Core/Consent%20String%20Specification.md">Global Privacy Platform </a> IAB documentation.
/// \param consent Which vendors and purposes did the user give consent for.
///
/// \param sectionIds List of the applicable section ids.
///
- (void)setGppConsentWithConsent:(NSString * _Nonnull)consent sectionIds:(NSString * _Nonnull)sectionIds;
/// Prevent to automatically set UIDevice.current.isBatteryMonitoringEnabled
- (void)disableBatteryMonitoring;
/// Add extra informations to settings.
/// \param value Extra value.
///
/// \param key Extra key.
///
- (void)addExtras:(NSString * _Nonnull)value for:(NSString * _Nonnull)key;
/// Instance settings builder.
/// \param build Build your <code>AdPlacementSettings</code> from this closure.
///
- (nonnull instancetype)initWithBuild:(SWIFT_NOESCAPE void (^ _Nonnull)(TeadsAdPlacementSettings * _Nonnull))build OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

/// This class is used to help in resizing a given ad view to a given aspect ratio.
SWIFT_CLASS("_TtC8TeadsSDK12TeadsAdRatio")
@interface TeadsAdRatio : NSObject
/// The <code>zero</code> size ratio.
/// note:
/// empty 0:0 aspect ratio, internal purpose only
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong) TeadsAdRatio * _Nonnull zero;)
+ (TeadsAdRatio * _Nonnull)zero SWIFT_WARN_UNUSED_RESULT;
/// The default value for <code>TeadsAdRatio</code>
/// note:
/// usually 16:9 HDTV aspect ratio
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong, getter=default) TeadsAdRatio * _Nonnull default_;)
+ (TeadsAdRatio * _Nonnull)default SWIFT_WARN_UNUSED_RESULT;
/// Compute the best height for your TeadsInReadAdView with the given width.
/// \param width the width of your TeadsInReadAdView.
///
///
/// returns:
/// The calculated height that fit the creative aspect ratio.
- (CGFloat)calculateHeightForWidth:(CGFloat)width SWIFT_WARN_UNUSED_RESULT;
/// Get a CGFloat ratio for a given width.
/// You can use returned value to specify autolayout multiplier constraint.
/// \param width the width of your TeadsInReadAdView.
///
///
/// returns:
/// The ratio corresponding to the given width.
- (CGFloat)valueFor:(CGFloat)width SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

/// Specify which settings you want to set for the related ad request.
/// Those settings will be persisted for the ad lifecycle only.
SWIFT_CLASS("_TtC8TeadsSDK22TeadsAdRequestSettings")
@interface TeadsAdRequestSettings : NSObject
/// The Teads inApp Validation tool is the best way to ensure all basic features and prerequisites are correctly implemented.
/// It is also useful during integration iterations.
/// Each time you upgrade TeadsSDK versions, you should perfom a validation pass to ensure integration is set correctly.
/// warning:
/// Remember to remove this setting when you are going in production.
/// note:
/// Follow <a href="https://support.teads.tv/support/solutions/articles/36000314783-validation-tool">validate your integration documentation</a>
- (void)enableValidationMode;
/// Set the publisher http page url that matches the content where Teads Ad will be loaded.
/// Setting this value can significally improve fill-rate since contextual data can be inferred from the content behing url.
/// It’s perfectly suitable for news app or retail app as most of the app content is also available on a website: it allows us to have a more detailed brand safety article by article.
/// For non-news apps, this setting is optional.
/// \param urlString The content related page URL.
///
- (void)pageUrl:(NSString * _Nonnull)rawUrlString;
/// Add extra informations to settings.
/// Mediation adapters purpose only
/// \param value Extra value.
///
/// \param key Extra key.
///
- (void)addExtras:(NSString * _Nonnull)value for:(NSString * _Nonnull)key;
/// Instance settings builder.
/// \param build Build your <code>TeadsAdRequestSettings</code> from this closure.
///
- (nonnull instancetype)initWithBuild:(SWIFT_NOESCAPE void (^ _Nonnull)(TeadsAdRequestSettings * _Nonnull))build OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

/// Root view inherited by <code>TeadsInReadAdView</code> & <code>TeadsNativeAdView</code>
/// note:
/// Do not instanciate it by yourself, you should instanciate childs
SWIFT_CLASS("_TtC8TeadsSDK11TeadsAdView")
@interface TeadsAdView : UIView
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder OBJC_DESIGNATED_INITIALIZER;
@end

/// Never create your own TeadsAdapterIntegrationType directly. Use one of the predefined standard values.
SWIFT_CLASS("_TtC8TeadsSDK27TeadsAdapterIntegrationType")
@interface TeadsAdapterIntegrationType : NSObject
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end

@protocol TeadsMediatedAdViewDelegate;
/// Settings used to load Teads’ mediation adapter ads
/// Specify which setting you want to set for the related mediation request.
/// Those settings will be persisted for the ad lifecycle only.
/// Only relevant when using  adapter such as
/// <ul>
///   <li>
///     <a href="https://support.teads.tv/support/solutions/articles/36000314767-inread-google-ad-manager-and-admob-mediation">AdMob</a>
///   </li>
///   <li>
///     <a href="https://support.teads.tv/support/solutions/articles/36000357700-inread-applovin-mediation">AppLovin</a>
///   </li>
///   <li>
///     <a href="https://support.teads.tv/support/solutions/articles/36000314771-smart-adserver-mediation-inread">Smart Ad Server</a>
///   </li>
///   <li>
///     <a href="https://support.teads.tv/support/solutions/articles/3600031477136000459748">Prebid</a>
///   </li>
/// </ul>
SWIFT_CLASS("_TtC8TeadsSDK20TeadsAdapterSettings")
@interface TeadsAdapterSettings : NSObject
/// Convenient way to specify ability to resize in settings
- (void)subscribeToAdResizing;
/// A value describing the native ad media scale that is being used.
/// This is only relevant for native ad.
@property (nonatomic, readonly) enum MediaScale mediaScale;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// Instance settings builder
/// \param build closure to tune settings
///
- (nonnull instancetype)initWithBuild:(SWIFT_NOESCAPE void (^ _Nonnull)(TeadsAdapterSettings * _Nonnull))build OBJC_DESIGNATED_INITIALIZER;
/// <em>Teads Crash Monitoring</em> is a tool we use to monitor crashes that may occur ONLY IN OUR SDK.
/// This tool is really helpful for us and it aims to improve our product continuously.
/// Prevent TeadsSDK to automatically handle/monitor crashes
/// note:
/// TeadsSDK does not disturb any third party crash handler/reporter such as Crashlytics
- (void)disableCrashMonitoring;
/// By default, the Teads SDK handles the audio session by setting its category to ambient.
/// This means that all the audio played by other apps will be simply mixed with the ad sound.
/// note:
/// If you chose to handle the audio session by yourself you need to call <code>disableTeadsAudioSessionManagement</code> and implement  <code>TeadsPlaybackDelegate/adStartPlayingAudio(_:)</code> & <code>TeadsPlaybackDelegate/adStopPlayingAudio(_:)</code>
- (void)disableTeadsAudioSessionManagement;
- (void)disableLocation SWIFT_DEPRECATED_MSG("TeadsSDK does not record location.");
- (void)enableLightEndScreen SWIFT_DEPRECATED_MSG("Won't be used in any newer SDK versions.");
/// To improve performances and user experience, media such as videos or images are preloaded.
/// This setting prevents TeadsSDK from automatically preloading media.
- (void)disableMediaPreload SWIFT_DEPRECATED_MSG("This is not used anymore and will be removed in a future version of the SDK");
/// In order to follow the IAB specifications for GDPR, please fill the following parameters with attention.
/// note:
/// If you use a <a href="https://iabeurope.eu/tcf-for-cmps/">CMP</a>, you can skip this step: CMP will store those parameters into <code>UserDefaults</code>, TeadSDK will automatically retrieve these values. <a href="https://github.com/InteractiveAdvertisingBureau/GDPR-Transparency-and-Consent-Framework/blob/master/TCFv2/IAB%20Tech%20Lab%20-%20CMP%20API%20v2.md">GDPR Transparency and Consent Framework </a> IAB documentation.
/// \param subjectToGDPR <code>"1"</code> if the traffic or the publisher is in the EEA (European Economic Area), <code>"0"</code> if it is not, <code>"null"</code> if it’s unknown.
///
/// \param consent Which vendors and purposes did the user give consent for.
///
/// \param tcfVersion Transparency and Consent Framework version.
///
/// \param cmpSdkID Consent Manager Platform unique identifier.
///
- (void)userConsentWithSubjectToGDPR:(NSString * _Nonnull)subjectToGDPR consent:(NSString * _Nonnull)consent tcfVersion:(enum TCFVersion)tcfVersion cmpSdkID:(NSInteger)cmpSdkID;
/// In order to follow the IAB specifications for CCPA, please fill the following parameters with attention.
/// requires:
/// consent US Privacy string value should be formated following <a href="https://github.com/InteractiveAdvertisingBureau/USPrivacy/blob/master/CCPA/US%20Privacy%20String.md#us-privacy-string-format">IAB specifications</a>
/// note:
/// If you use a Content Management Platform, you can skip this step: CMP will store those parameters into <code>UserDefaults</code>, TeadSDK will automatically retrieve consent value. <a href="https://github.com/InteractiveAdvertisingBureau/USPrivacy/blob/master/CCPA/US%20Privacy%20String.md">CCPA</a> IAB documentation.
/// \param consent The CCPA consent string
///
- (void)setUsPrivacyWithConsent:(NSString * _Nonnull)consent;
/// In order to follow the IAB specifications for GPP, please fill the following parameters with attention.
/// note:
/// If you use a <a href="https://iabeurope.eu/tcf-for-cmps/">CMP</a>, you can skip this step: CMP will store those parameters into <code>UserDefaults</code>, TeadSDK will automatically retrieve these values. <a href="https://github.com/InteractiveAdvertisingBureau/Global-Privacy-Platform/blob/main/Core/Consent%20String%20Specification.md">Global Privacy Platform </a> IAB documentation.
/// \param consent Which vendors and purposes did the user give consent for.
///
/// \param sectionIds List of the applicable section ids.
///
- (void)setGppConsentWithConsent:(NSString * _Nonnull)consent sectionIds:(NSString * _Nonnull)sectionIds;
/// Prevent to automatically set UIDevice.current.isBatteryMonitoringEnabled
- (void)disableBatteryMonitoring;
/// Add extra informations to settings.
/// note:
/// for Adapater scope mainly
/// \param value Extra value.
///
/// \param key Extra key.
///
- (void)addExtras:(NSString * _Nonnull)value for:(NSString * _Nonnull)key;
/// Enable all TeadsSDK Log for debugging purpose
/// warning:
/// Remember to remove this setting when you are going in production
- (void)enableDebug;
/// The Teads inApp Validation tool is the best way to ensure all basic features and prerequisites are correctly implemented.
/// It is also useful during integration iterations.
/// warning:
/// Remember to remove this setting when you are going in production.
/// note:
/// Follow <a href="https://support.teads.tv/support/solutions/articles/36000314783-validation-tool">validate your integration documentation</a>
- (void)enableValidationMode;
/// Set the publisher http page url that matches the content where Teads Ad will be loaded.
/// requires:
/// urlsString value should be a valid reachable URL mathing slot neighbor content
/// \param urlString The content related page URL.
///
- (void)pageUrl:(NSString * _Nonnull)urlString;
/// Set the native media view scale.
/// important:
/// This setting only apply for native ads.
/// \param mediaScale The media scale.
///
- (void)setMediaScale:(enum MediaScale)mediaScale;
- (BOOL)subscribeAdResizeDelegate:(id <TeadsMediatedAdViewDelegate> _Nonnull)delegate forAdView:(UIView * _Nonnull)adView error:(NSError * _Nullable * _Nullable)error SWIFT_DEPRECATED_MSG("", "registerAdView:delegate:");
/// Register the ad view in case of mediation adapter.
/// In order to perform ad resizing you need to register AdView with a <code>delegate</code>
/// implementing <code>TeadsMediatedAdViewDelegate/didUpdateRatio(_:adRatio:)</code> will allows you to resize the  AdView
/// \param adView slot view returned by Mediation actor
///
/// \param delegate TeadsMediatedAdViewDelegate to update adView slot size
///
///
/// throws:
/// Error is thrown if the <code>adView</code> parameter supplied is not a subclass of Mediation third-party networks like Admob or AppLovin
- (void)registerAdView:(UIView * _Nonnull)adView delegate:(id <TeadsMediatedAdViewDelegate> _Nonnull)delegate;
@end

@interface TeadsAdapterSettings (SWIFT_EXTENSION(TeadsSDK))
/// Return a dictionary representation of the current TeadsAdSettings object.
///
/// returns:
/// A <code>[AnyHashable: Any]</code> representing the object.
- (NSDictionary * _Nullable)toDictionaryAndReturnError:(NSError * _Nullable * _Nullable)error SWIFT_WARN_UNUSED_RESULT;
/// Create an instance from <code>[AnyHashable: Any]</code>
/// \param dictionary representation of TeadsAdSettings instance
///
///
/// returns:
/// A <code>TeadsAdapterSettings</code> object instance.
+ (TeadsAdapterSettings * _Nullable)instanceFrom:(NSDictionary * _Nonnull)dictionary error:(NSError * _Nullable * _Nullable)error SWIFT_WARN_UNUSED_RESULT;
/// Specify integration type and version
/// When using mediation adapters or plugin, provide a integration data to monitor them
/// important:
/// Adapters internal purpose only
- (void)setIntegrationWithType:(TeadsAdapterIntegrationType * _Nonnull)integration version:(NSString * _Nonnull)version;
@end

/// A TeadsInReadAd represents an InRead ad that will be binded to a <code>TeadsInReadAdView</code> instance
/// This instance is returned through <code>TeadsInReadAdPlacementDelegate/didReceiveAd(ad:adRatio:)</code>
/// note:
/// you need use <code>TeadsInReadAdView</code> to bind a <code>TeadsInReadAd</code>
SWIFT_CLASS("_TtC8TeadsSDK13TeadsInReadAd")
@interface TeadsInReadAd : TeadsAd
@end

@interface TeadsInReadAd (SWIFT_EXTENSION(TeadsSDK))
/// adRatio to correctly display ad
/// note:
/// call  <code>TeadsAdRatio/calculateHeight(for:)</code> to obtain optimal height to better fit ad size
@property (nonatomic, readonly, strong) TeadsAdRatio * _Nonnull adRatio;
@end

/// InRead ad placement to request inRead ads
/// This object is reponsible for performing request and is tied to you PID (placement identifier)
/// In order to create placement, call <code>Teads/createInReadPlacement(pid:settings:delegate:)</code>
/// important:
/// You must own/retain <code>TeadsInReadAdPlacement</code> instance, otherwise ads could not be delivered properly
/// note:
/// See <a href="https://support.teads.tv/support/solutions/articles/36000314722-inread-classic-integration">InRead implementation guide</a> documentation
SWIFT_PROTOCOL("_TtP8TeadsSDK22TeadsInReadAdPlacement_")
@protocol TeadsInReadAdPlacement <TeadsAdPlacement>
/// TeadsInReadAdPlacementDelegate to follow ad placement lifecycle
@property (nonatomic, strong) id <TeadsInReadAdPlacementDelegate> _Nullable delegate;
/// Request an InRead ad on this placement
/// listen for events by implementing <code>TeadsInReadAdPlacementDelegate</code>
/// requires:
/// <code>TeadsInReadAdPlacement/delegate</code> property must be set to perform ad request, otherwise didReceiveAd will not be triggered
/// \param requestSettings settings <code>TeadsInReadAdRequestSettings</code> to tweak your needs
///
///
/// returns:
/// a unique request identifier, this identifier will be the same value of <code>TeadsInReadAd.requestIdentifier</code> property
- (NSUUID * _Nonnull)requestAdWithRequestSettings:(TeadsAdRequestSettings * _Nonnull)requestSettings;
@end

/// Delegate methods needed to follow Teads inRead ad requests flow
SWIFT_PROTOCOL("_TtP8TeadsSDK30TeadsInReadAdPlacementDelegate_")
@protocol TeadsInReadAdPlacementDelegate <TeadsAdPlacementDelegate>
/// Called when the Teads SDK has received an ad for you to display
/// \param ad The teadsAd object
///
/// \param adRatio an object that will help you display the ad correctly
///
- (void)didReceiveAdWithAd:(TeadsInReadAd * _Nonnull)ad adRatio:(TeadsAdRatio * _Nonnull)adRatio;
/// Called when the Teads SDK needs you to resize your adView the creative inform us of its new ratio
/// When it called it is the right place to update your view ratio. A basic implementation may look litke this:
/// \code
/// func didUpdateRatio(ad: TeadsInReadAd, adRatio: TeadsAdRatio) {
///     yourViewHeight = adRatio.calculateHeight(for: yourViewWidth)
/// }
///
/// \endcodeAlternatively you can call <code>adRatio.value(for:)</code> to set multiplier constraint
/// \code
/// func didUpdateRatio(ad: TeadsInReadAd, adRatio: TeadsAdRatio) {
///     let multiplier = adRatio.value(for: yourViewWidth)
///     // create constaint with `multiplier and replace it with exisiting one
/// }
///
/// \endcode\param ad The teadsAd object
///
/// \param adRatio an object that will help you display the ad correctly
///
- (void)didUpdateRatioWithAd:(TeadsInReadAd * _Nonnull)ad adRatio:(TeadsAdRatio * _Nonnull)adRatio;
@end

@class UIWindow;
/// The Teads inRead ad view is responsible to manage a Teads inRead ad.
SWIFT_CLASS("_TtC8TeadsSDK17TeadsInReadAdView")
@interface TeadsInReadAdView : TeadsAdView
- (void)willMoveToWindow:(UIWindow * _Nullable)newWindow;
- (void)didMoveToWindow;
/// Call this to bind an inRead ad to your inRead ad view.
/// important:
/// This call is mandatory in order render UI of <code>TeadsInReadAdView</code>
/// \param ad The ad that should be binded to the ad view.
///
- (void)bind:(TeadsInReadAd * _Nonnull)ad;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
- (void)layoutSubviews;
@end

@class VideoComponent;
/// The TeadsMediaView can load either images, videos and VPAID content.
/// Implement it to render media component content using <code>TeadsMediaView/bind(component:)</code>
/// <ul>
///   <li>
///     <code>ImageComponent</code>
///   </li>
///   <li>
///     <code>VideoComponent</code>
///   </li>
/// </ul>
SWIFT_CLASS("_TtC8TeadsSDK14TeadsMediaView")
@interface TeadsMediaView : UIView
/// When dealing with VideoComponent, it needs to be rendered using TeadsMediaView
- (nonnull instancetype)initWithVideoComponent:(VideoComponent * _Nonnull)videoComponent OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder SWIFT_UNAVAILABLE;
- (void)layoutSubviews;
- (void)bindWithComponent:(CommonComponent * _Nullable)component;
@end

/// When using mediation adapters on inRead placement you must register your view in order to monitor and perform resize updates
SWIFT_PROTOCOL("_TtP8TeadsSDK27TeadsMediatedAdViewDelegate_")
@protocol TeadsMediatedAdViewDelegate
/// Called when the ad ratio is udpated. (only for mediation)
/// \param adView The adView in which the ad is being played.
///
/// \param adRatio The ratio you should use to update your adView height.
///
- (void)didUpdateRatio:(UIView * _Nonnull)adView adRatio:(TeadsAdRatio * _Nonnull)adRatio;
@end

/// A TeadsNativeAd represents an ad that will be displayed by the native code of the application. This ad is fully customizable
/// You should register your class (typically a UIViewController) to <code>delegate</code> conforming to <code>TeadsAdDelegate</code> in order to follow ad lifecycle
/// warning:
/// Contrary to the <code>TeadsInReadAd</code> object, the <code>TeadsNativeAd</code> only contains information that needs to be displayed.
/// It does not create any view for the actual display: your application is responsible of the ad rendering.
/// We strongly advise you to use <code>TeadsNativeAdView</code> to bind ad <code>TeadsNativeAd</code>
SWIFT_CLASS("_TtC8TeadsSDK13TeadsNativeAd")
@interface TeadsNativeAd : TeadsAd
/// Ad’s title
/// note:
/// contains ``CommonComponent/text` String property
@property (nonatomic, readonly, strong) CommonComponent * _Nullable title;
/// Ad’s main content / body
/// Descriptive text associated with the product or service being advertised
/// note:
/// <code>CommonComponent/text</code> String property reprensent large description of ad
@property (nonatomic, readonly, strong) CommonComponent * _Nullable content;
/// Main image element of ad, usually corresponds to main media content
/// Large image preview for the ad
/// note:
/// <code>ImageComponent/url</code> property
/// note:
/// you can call <code>ImageComponent/loadImage(async:success:failure:)</code> to get <code>UImage</code>
@property (nonatomic, readonly, strong) ImageComponent * _Nullable image;
/// Icon should contain icon
/// note:
/// <code>ImageComponent/url</code> property
/// note:
/// you can call <code>ImageComponent/loadImage(async:success:failure:)</code> to get <code>UImage</code>
@property (nonatomic, readonly, strong) ImageComponent * _Nullable icon;
/// Sponsored may contain the brand name of the sponsor / advertiser.
/// note:
/// <code>CommonComponent/text</code> String property represents brand name value
@property (nonatomic, readonly, strong) CommonComponent * _Nullable sponsored;
/// Text describing a ‘call to action’ button for destination URL
/// note:
/// <code>CommonComponent/text</code> String property represents the action that will be made when the ad is clicked: for instance ‘Learn more’ or ‘Buy now’.
@property (nonatomic, readonly, strong) CommonComponent * _Nullable callToAction;
/// Represent multimedia component, should be used in conjonction with <code>TeadsMediaView</code>
/// note:
/// contains <code>VideoComponent/contentAspectRatio</code> CGFloat property
@property (nonatomic, readonly, strong) VideoComponent * _Nullable video;
/// Rating of the product being offered to the user
/// note:
/// <code>CommonComponent/text</code> String property represents float rating value
@property (nonatomic, readonly, strong) CommonComponent * _Nullable rating;
/// Price for product / app / in-app purchase
/// note:
/// <code>CommonComponent/text</code> String property represents price value including currency symbol in localised format
@property (nonatomic, readonly, strong) CommonComponent * _Nullable price;
/// Teads’ AdChoices element
/// note:
/// <code>AdChoicesComponent/clickThroughUrl</code> property represents advertiser’s url
@property (nonatomic, readonly, strong) AdChoicesComponent * _Nullable adChoices;
/// register containerView
/// note:
/// this should be called on adapter part or without interface builder
/// \param view view containing UI elements defined in  ``TeadsNativeAdView`
///
- (void)registerWithContainerView:(UIView * _Nonnull)containerView;
@end

@protocol TeadsNativeAdPlacementDelegate;
/// Native ad placement to request native ads
/// From instance reponsible for performing request and is tied to you PID (placement identifier)
/// In order to create placement, call <code>Teads/createNativePlacement(pid:settings:delegate:)</code>
/// important:
/// You must own/retain <code>TeadsNativeAdPlacement</code> instance, otherwise ads could not be delivered properly
/// note:
/// See <a href="https://support.teads.tv/support/solutions/articles/36000314757-native-ad-classic-integration">Native implementation guide</a> documentation
SWIFT_PROTOCOL("_TtP8TeadsSDK22TeadsNativeAdPlacement_")
@protocol TeadsNativeAdPlacement <TeadsAdPlacement>
/// TeadsNativeAdPlacementDelegate to follow ad placement lifecycle
@property (nonatomic, strong) id <TeadsNativeAdPlacementDelegate> _Nullable delegate;
/// Request a native ad on this placement
/// listen for events by implementing <code>TeadsNativeAdPlacementDelegate</code>
/// requires:
/// <code>TeadsNativeAdPlacement/delegate</code> property must be set to perform ad request, otherwise didReceiveAd will not be triggered
/// \param requestSettings settings <code>TeadsNativeAdRequestSettings</code> to tweak your needs
///
///
/// returns:
/// a unique request identifier, this identifier will be the same value of TeadsNativeAd requestIdentifier property
- (NSUUID * _Nonnull)requestAdWithRequestSettings:(TeadsAdRequestSettings * _Nonnull)requestSettings;
@end

/// Delegate methods needed to follow Teads native ad requests flow
SWIFT_PROTOCOL("_TtP8TeadsSDK30TeadsNativeAdPlacementDelegate_")
@protocol TeadsNativeAdPlacementDelegate <TeadsAdPlacementDelegate>
/// Called when the Teads SDK has received an ad for you to display
/// \param ad The teadsAd object
///
/// \param adRatio an object that will help you display the ad correctly
///
- (void)didReceiveAdWithAd:(TeadsNativeAd * _Nonnull)ad;
@end

@class UILabel;
@class UIImageView;
@class UIButton;
/// The Teads native ad view is responsible to manage a Teads native ad.
SWIFT_CLASS("_TtC8TeadsSDK17TeadsNativeAdView")
@interface TeadsNativeAdView : TeadsAdView
/// The native ad title label.
@property (nonatomic, strong) IBOutlet UILabel * _Nullable titleLabel;
/// The native ad content / body / description label.
@property (nonatomic, strong) IBOutlet UILabel * _Nullable contentLabel;
/// The native ad media view (for images and videos).
@property (nonatomic, strong) IBOutlet TeadsMediaView * _Nullable mediaView;
/// The native ad icon / logo image view.
/// Contenet usually corresponds to brand logo
@property (nonatomic, strong) IBOutlet UIImageView * _Nullable iconImageView;
/// The native ad advertiser / sponsored label.
/// /// Content usually corresponds to brand name
@property (nonatomic, strong) IBOutlet UILabel * _Nullable advertiserLabel;
/// The native ad call to action button.
/// e.g: <code>"Shop now!"</code>
@property (nonatomic, strong) IBOutlet UIButton * _Nullable callToActionButton;
/// The native ad rating view.
@property (nonatomic, strong) IBOutlet UIView * _Nullable ratingView;
/// The native ad price label.
@property (nonatomic, strong) IBOutlet UILabel * _Nullable priceLabel;
/// Call this function to bind a native ad to your native ad view.
/// important:
/// This call is mandatory in order to monitor ad viewability of each components
/// \param ad The ad that should be binded to the ad view.
///
- (void)bind:(TeadsNativeAd * _Nonnull)ad;
/// Binds the native asset ad views to this native ad using view tags binder
/// Specify a unique <code>tag</code> value for each UI element on InterfaceBuilder: make sure to match them using builder
/// \code
/// adView.bind(ad) { builder in
///     builder.titleLabelTag = 1
///     builder.contentLabelTag = 2
///     builder.mediaViewTag = 3
///     builder.iconImageViewTag = 4
///     builder.callToActionButtonTag = 5
///     builder.advertiserLabelTag = 6
/// }
///
/// \endcode\param ad The ad that should be binded to the ad view.
///
/// \param tagBinder Binds the native asset ad views to this native ad using view tags.
///
- (void)bind:(TeadsNativeAd * _Nonnull)ad tagBinder:(SWIFT_NOESCAPE void (^ _Nonnull)(TagBinderBuilder * _Nonnull))tagBinder;
- (nonnull instancetype)initWithFrame:(CGRect)frame OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder OBJC_DESIGNATED_INITIALIZER;
@end

/// Delegate methods sending informations about Teads ads playback states.
SWIFT_PROTOCOL("_TtP8TeadsSDK21TeadsPlaybackDelegate_")
@protocol TeadsPlaybackDelegate
@optional
/// Called when an ad starts playing audio.
/// \param ad The ad that has started playing audio.
///
- (void)adStartPlayingAudio:(TeadsAd * _Nonnull)ad;
/// Called when an ad stops playing audio.
/// \param ad The ad that has stopped playing audio.
///
- (void)adStopPlayingAudio:(TeadsAd * _Nonnull)ad;
/// Called when an ad has started or resumed.
/// \param ad The ad that has played or resumed.
///
- (void)didPlay:(TeadsAd * _Nonnull)ad;
/// Called when an ad has been paused.
/// \param ad The ad that has been paused.
///
- (void)didPause:(TeadsAd * _Nonnull)ad;
/// Called when an ad has ended.
/// \param ad The ad that has ended.
///
- (void)didComplete:(TeadsAd * _Nonnull)ad;
@end

/// / Prebid ad placement to load inRead ads from Prebid winning bid
/// This object is reponsible of loading prebid winning ad response
/// In order to create placement, call <code>Teads/createPrebidPlacement(settings:delegate:)</code>
/// important:
/// You must own/retain <code>TeadsPrebidAdPlacement</code> instance, otherwise ads could not be delivered properly
SWIFT_PROTOCOL("_TtP8TeadsSDK22TeadsPrebidAdPlacement_")
@protocol TeadsPrebidAdPlacement <TeadsAdPlacement>
/// TeadsInReadAdPlacementDelegate to follow ad placement lifecycle
@property (nonatomic, strong) id <TeadsInReadAdPlacementDelegate> _Nullable delegate;
/// Load an InRead ad on this placement by passing adResponse value
/// listen for events by implementing <code>TeadsInReadAdPlacementDelegate</code>
/// requires:
/// <code>TeadsPrebidAdPlacement/delegate</code> property must be set to perform ad request, otherwise didReceiveAd will not be triggered
/// \param adResponse Prebid winning bid ad response string representation (stringified JSON)
///
/// \param requestSettings settings <code>TeadsInReadAdRequestSettings</code> to tweak your needs
///
///
/// returns:
/// a unique load identifier, this identifier will be the same value of <code>TeadsInReadAd.requestIdentifier</code> property
- (NSUUID * _Nonnull)loadAdWithAdResponse:(NSString * _Nonnull)adResponse requestSettings:(TeadsAdRequestSettings * _Nonnull)requestSettings;
/// get prebid request data
/// requires:
/// <code>TeadsPrebidAdPlacement/delegate</code> property must be set to perform ad request, otherwise didReceiveAd will not be triggered
/// \param requestSettings settings <code>TeadsInReadAdRequestSettings</code> to tweak your needs
///
///
/// throws:
/// error when not able to gather data
- (NSDictionary * _Nullable)getDataWithRequestSettings:(TeadsAdRequestSettings * _Nonnull)requestSettings error:(NSError * _Nullable * _Nullable)error;
@end

/// Delegate methods sending informations about Teads ads sound states.
SWIFT_PROTOCOL("_TtP8TeadsSDK18TeadsSoundDelegate_") SWIFT_UNAVAILABLE_MSG("'TeadsSoundDelegate' has been renamed to '_TtP8TeadsSDK21TeadsPlaybackDelegate_': Use TeadsPlaybackDelegate instead")
@protocol TeadsSoundDelegate
/// Called when an ad starts playing audio.
/// \param ad The ad that starts playing audio.
///
- (void)adStartPlayingAudio:(TeadsAd * _Nonnull)ad;
/// Called when an ad stops playing audio.
/// \param ad The ad that stops playing audio.
///
- (void)adStopPlayingAudio:(TeadsAd * _Nonnull)ad;
@end

@interface UIButton (SWIFT_EXTENSION(TeadsSDK))
- (void)bindWithComponent:(CommonComponent * _Nullable)component;
@end

@interface UIImageView (SWIFT_EXTENSION(TeadsSDK))
- (void)bindWithComponent:(CommonComponent * _Nullable)component;
@end

@interface UILabel (SWIFT_EXTENSION(TeadsSDK))
- (void)bindWithComponent:(CommonComponent * _Nullable)component;
@end

@interface UIView (SWIFT_EXTENSION(TeadsSDK))
/// map your UIKit element to TeadsSDK logic,
/// this ensures visibility measurement is monitored and click behaviors are well handled
/// \param component object holding text, image or video depending on his subtype
///
- (void)bindWithComponent:(CommonComponent * _Nullable)component;
@end

/// Native video component containing media content
/// note:
/// In order to render VideoComponent, you need to instanciate a <code>TeadsMediaView</code> by calling <code>TeadsMediaView/init(videoComponent:)</code>
SWIFT_CLASS("_TtC8TeadsSDK14VideoComponent")
@interface VideoComponent : CommonComponent
/// Media content aspect ratio (width/height).
@property (nonatomic, readonly) CGFloat contentAspectRatio;
@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
