// Generated by Apple Swift version 4.0.2 (swiftlang-900.0.69.2 clang-900.0.38)
#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_attribute(external_source_symbol)
# define SWIFT_STRINGIFY(str) #str
# define SWIFT_MODULE_NAMESPACE_PUSH(module_name) _Pragma(SWIFT_STRINGIFY(clang attribute push(__attribute__((external_source_symbol(language="Swift", defined_in=module_name, generated_declaration))), apply_to=any(function, enum, objc_interface, objc_category, objc_protocol))))
# define SWIFT_MODULE_NAMESPACE_POP _Pragma("clang attribute pop")
#else
# define SWIFT_MODULE_NAMESPACE_PUSH(module_name)
# define SWIFT_MODULE_NAMESPACE_POP
#endif

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

#pragma clang diagnostic ignored "-Wauto-import"
#include <objc/NSObject.h>
#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>

#if !defined(SWIFT_TYPEDEFS)
# define SWIFT_TYPEDEFS 1
# if __has_include(<uchar.h>)
#  include <uchar.h>
# elif !defined(__cplusplus) || __cplusplus < 201103L
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 __has_attribute(objc_runtime_name)
# define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X)))
#else
# define SWIFT_RUNTIME_NAME(X)
#endif
#if __has_attribute(swift_name)
# define SWIFT_COMPILE_NAME(X) __attribute__((swift_name(X)))
#else
# define SWIFT_COMPILE_NAME(X)
#endif
#if __has_attribute(objc_method_family)
# define SWIFT_METHOD_FAMILY(X) __attribute__((objc_method_family(X)))
#else
# define SWIFT_METHOD_FAMILY(X)
#endif
#if __has_attribute(noescape)
# define SWIFT_NOESCAPE __attribute__((noescape))
#else
# define SWIFT_NOESCAPE
#endif
#if __has_attribute(warn_unused_result)
# define SWIFT_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
#else
# define SWIFT_WARN_UNUSED_RESULT
#endif
#if __has_attribute(noreturn)
# define SWIFT_NORETURN __attribute__((noreturn))
#else
# define SWIFT_NORETURN
#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_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 defined(__has_attribute) && __has_attribute(enum_extensibility)
#  define SWIFT_ENUM_ATTR __attribute__((enum_extensibility(open)))
# else
#  define SWIFT_ENUM_ATTR
# endif
#endif
#if !defined(SWIFT_ENUM)
# define SWIFT_ENUM(_type, _name) enum _name : _type _name; enum SWIFT_ENUM_ATTR SWIFT_ENUM_EXTRA _name : _type
# if __has_feature(generalized_swift_name)
#  define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME) enum _name : _type _name SWIFT_COMPILE_NAME(SWIFT_NAME); enum SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_ENUM_ATTR SWIFT_ENUM_EXTRA _name : _type
# else
#  define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME) SWIFT_ENUM(_type, _name)
# 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_DEPRECATED)
# define SWIFT_DEPRECATED __attribute__((deprecated))
#endif
#if !defined(SWIFT_DEPRECATED_MSG)
# define SWIFT_DEPRECATED_MSG(...) __attribute__((deprecated(__VA_ARGS__)))
#endif
#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
#if __has_feature(modules)
@import ObjectiveC;
@import Foundation;
@import CoreData;
@import UIKit;
#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"

SWIFT_MODULE_NAMESPACE_PUSH("TrackerExtension")
@class Tracker;

/// Use this class to manage tracker instances
SWIFT_CLASS("_TtC16TrackerExtension10ATInternet")
@interface ATInternet : NSObject
/// Get a Tracker with “defaultTracker” name
@property (nonatomic, readonly, strong) Tracker * _Nonnull defaultTracker;
/// Default initializer
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
/// Singleton
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong) ATInternet * _Nonnull sharedInstance;)
+ (ATInternet * _Nonnull)sharedInstance SWIFT_WARN_UNUSED_RESULT;
/// Get a tracker with default configuration
/// \param name the tracker identifier
///
///
/// returns:
/// a new tracker or an existing instance
- (Tracker * _Nonnull)tracker:(NSString * _Nonnull)name SWIFT_WARN_UNUSED_RESULT;
/// Get a tracker with custom configuration
/// \param name the tracker identifier
///
/// \param configuration a custom configuration. See TrackerConfigurationKeys
///
///
/// returns:
/// a new tracker or an existing instance
- (Tracker * _Nonnull)tracker:(NSString * _Nonnull)name configuration:(NSDictionary<NSString *, NSString *> * _Nonnull)configuration SWIFT_WARN_UNUSED_RESULT;
@end


SWIFT_CLASS("_TtC16TrackerExtension14ATReachability")
@interface ATReachability : NSObject
@property (nonatomic, readonly, copy) NSString * _Nonnull description;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
@end


/// Super class for object tracking. Not recommended for normal use. If you need special markers you can subclass BusinessObject.
SWIFT_CLASS("_TtC16TrackerExtension14BusinessObject")
@interface BusinessObject : NSObject
/// Default initializer
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

enum ScreenAction : NSInteger;
@class CustomObjects;
@class CustomVars;
@class Aisle;
@class CustomTreeStructure;
@class PublisherImpressions;
@class SelfPromotionImpressions;
@class Location;
@class Campaign;
@class InternalSearch;
@class Order;
@class Cart;

/// Abstract business object to manage screen tracking.
SWIFT_CLASS("_TtC16TrackerExtension14AbstractScreen")
@interface AbstractScreen : BusinessObject
/// Screen name
@property (nonatomic, copy) NSString * _Nonnull name;
/// First chapter
@property (nonatomic, copy) NSString * _Nullable chapter1;
/// Second chapter
@property (nonatomic, copy) NSString * _Nullable chapter2;
/// Third chapter
@property (nonatomic, copy) NSString * _Nullable chapter3;
/// Action
@property (nonatomic) enum ScreenAction action;
/// Level 2
@property (nonatomic) NSInteger level2;
/// true if the screen is a basket screen
@property (nonatomic) BOOL isBasketScreen;
/// Get a wrapper for Custom object management
@property (nonatomic, strong) CustomObjects * _Nonnull customObjects;
/// Get a wrapper for CustomVar management
@property (nonatomic, strong) CustomVars * _Nonnull customVars;
/// Attach visited aisle to screen
@property (nonatomic, strong) Aisle * _Nullable aisle;
/// Attach Custom tree structure to screen
@property (nonatomic, strong) CustomTreeStructure * _Nullable customTreeStructure;
/// Attach Publisher impression to screen
@property (nonatomic, strong) PublisherImpressions * _Nonnull publishers;
/// Attach Publisher impression to screen
@property (nonatomic, strong) SelfPromotionImpressions * _Nonnull selfPromotions;
/// Attach Location information to screen
@property (nonatomic, strong) Location * _Nullable location;
/// Attach Campaign information  to screen
@property (nonatomic, strong) Campaign * _Nullable campaign;
/// Attach Search result info to screen
@property (nonatomic, strong) InternalSearch * _Nullable internalSearch;
/// Attach Order information to screen
@property (nonatomic, strong) Order * _Nullable order;
/// Attach a Cart to screen
@property (nonatomic, strong) Cart * _Nullable cart;
/// Send a screen view event
/// If the screen is generated by AutoTracking, do not call this function in the screenWasDetected delegate, otherwise, the screen will be sent twice.
- (void)sendView;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

/// Actions
typedef SWIFT_ENUM(NSInteger, ScreenAction) {
/// view actions
  ScreenActionView = 0,
};


/// Business object type for screen tracking. Used only for specific case.
SWIFT_CLASS("_TtC16TrackerExtension10ScreenInfo")
@interface ScreenInfo : BusinessObject
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end


/// Wrapper class for Visited aisle tracking
SWIFT_CLASS("_TtC16TrackerExtension5Aisle")
@interface Aisle : ScreenInfo
/// Aisle level1 label
@property (nonatomic, copy) NSString * _Nullable level1;
/// Aisle level2 label
@property (nonatomic, copy) NSString * _Nullable level2;
/// Aisle level3 label
@property (nonatomic, copy) NSString * _Nullable level3;
/// Aisle level4 label
@property (nonatomic, copy) NSString * _Nullable level4;
/// Aisle level5 label
@property (nonatomic, copy) NSString * _Nullable level5;
/// Aisle level6 label
@property (nonatomic, copy) NSString * _Nullable level6;
- (nonnull instancetype)initWithTracker:(Tracker * _Nonnull)tracker OBJC_DESIGNATED_INITIALIZER;
/// Add tagging data for an aisle
/// \param level1 level1 label
///
- (nonnull instancetype)initWithLevel1:(NSString * _Nonnull)level1 OBJC_DESIGNATED_INITIALIZER;
/// Add tagging data for an aisle
/// \param level1 level1 label
///
/// \param level2 level2 label
///
- (nonnull instancetype)initWithLevel1:(NSString * _Nonnull)level1 level2:(NSString * _Nonnull)level2;
/// Add tagging data for an aisle
/// \param level1 level1 label
///
/// \param level2 level2 label
///
/// \param level3 level3 label
///
- (nonnull instancetype)initWithLevel1:(NSString * _Nonnull)level1 level2:(NSString * _Nonnull)level2 level3:(NSString * _Nonnull)level3;
/// Add tagging data for an aisle
/// \param level1 level1 label
///
/// \param level2 level2 label
///
/// \param level3 level3 label
///
/// \param level4 level4 label
///
- (nonnull instancetype)initWithLevel1:(NSString * _Nonnull)level1 level2:(NSString * _Nonnull)level2 level3:(NSString * _Nonnull)level3 level4:(NSString * _Nonnull)level4;
/// Add tagging data for an aisle
/// \param level1 level1 label
///
/// \param level2 level2 label
///
/// \param level3 level3 label
///
/// \param level4 level4 label
///
/// \param level5 level5 label
///
- (nonnull instancetype)initWithLevel1:(NSString * _Nonnull)level1 level2:(NSString * _Nonnull)level2 level3:(NSString * _Nonnull)level3 level4:(NSString * _Nonnull)level4 level5:(NSString * _Nonnull)level5;
/// Add tagging data for an aisle
/// \param level1 level1 label
///
/// \param level2 level2 label
///
/// \param level3 level3 label
///
/// \param level4 level4 label
///
/// \param level5 level5 label
///
/// \param level6 level6 label
///
- (nonnull instancetype)initWithLevel1:(NSString * _Nonnull)level1 level2:(NSString * _Nonnull)level2 level3:(NSString * _Nonnull)level3 level4:(NSString * _Nonnull)level4 level5:(NSString * _Nonnull)level5 level6:(NSString * _Nonnull)level6;
/// Set parameters in buffer
- (void)setEvent;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
@end

enum RichMediaAction : NSInteger;

/// Abstract class to manage rich media tracking
SWIFT_CLASS("_TtC16TrackerExtension9RichMedia")
@interface RichMedia : BusinessObject
/// Media name
@property (nonatomic, copy) NSString * _Nonnull name;
/// First chapter
@property (nonatomic, copy) NSString * _Nullable chapter1;
/// Second chapter
@property (nonatomic, copy) NSString * _Nullable chapter2;
/// Third chapter
@property (nonatomic, copy) NSString * _Nullable chapter3;
/// Level 2
@property (nonatomic) NSInteger level2;
/// Action. see RichMediaAction
@property (nonatomic) enum RichMediaAction action;
/// Web domain
@property (nonatomic, copy) NSString * _Nullable webdomain;
/// Send a play action tracking. Refresh is enabled with default duration
- (void)sendPlay;
/// Send a play action tracking. Refresh is enabled with custom duration
/// \param refreshDuration duration in second, must be >= 5
///
- (void)sendPlay:(NSInteger)refreshDuration;
/// Send a pause action tracking
- (void)sendPause;
/// Send a stop action tracking
- (void)sendStop;
/// Send a move action tracking
- (void)sendMove;
/// Medthod called on the timer tick
- (void)sendRefresh;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
@end

/// Actions types
/// <ul>
///   <li>
///     play: play
///   </li>
///   <li>
///     pause: pause
///   </li>
///   <li>
///     stop: stop
///   </li>
///   <li>
///     move: move
///   </li>
///   <li>
///     refresh: refresh
///   </li>
/// </ul>
typedef SWIFT_ENUM(NSInteger, RichMediaAction) {
/// play
  RichMediaActionPlay = 0,
/// pause
  RichMediaActionPause = 1,
/// stop
  RichMediaActionStop = 2,
/// move
  RichMediaActionMove = 3,
/// refresh
  RichMediaActionRefresh = 4,
};


/// Wrap class for audio media tracking
SWIFT_CLASS("_TtC16TrackerExtension5Audio")
@interface Audio : RichMedia
/// Media type
@property (nonatomic, readonly, copy) NSString * _Nonnull type;
/// Duration
@property (nonatomic) NSInteger duration;
@end

@class MediaPlayer;

/// Wrapper class to manage Audio instances
SWIFT_CLASS("_TtC16TrackerExtension6Audios")
@interface Audios : NSObject
@property (nonatomic, copy) NSDictionary<NSString *, Audio *> * _Nonnull list;
/// MediaPlayer instance
@property (nonatomic, strong) MediaPlayer * _Nonnull player;
/// Audios initializer
/// \param player the player instance
///
///
/// returns:
/// Audios instance
- (nonnull instancetype)initWithPlayer:(MediaPlayer * _Nonnull)player OBJC_DESIGNATED_INITIALIZER;
/// Add a new Audio
/// \param name audio name
///
/// \param duration duration of the track in second
///
///
/// returns:
/// the new Audio instance
- (Audio * _Nonnull)add:(NSString * _Nonnull)name duration:(NSInteger)duration SWIFT_WARN_UNUSED_RESULT;
/// Add a new Audio
/// \param name audio name
///
/// \param chapter1 audio first chapter
///
/// \param duration duration of the track in second
///
///
/// returns:
/// the new Audio instance
- (Audio * _Nonnull)add:(NSString * _Nonnull)name chapter1:(NSString * _Nonnull)chapter1 duration:(NSInteger)duration SWIFT_WARN_UNUSED_RESULT;
/// Add a new Audio
/// \param name audio name
///
/// \param chapter1 audio first chapter
///
/// \param chapter2 audio second chapter
///
/// \param duration duration of the track in second
///
///
/// returns:
/// the new Audio instance
- (Audio * _Nonnull)add:(NSString * _Nonnull)name chapter1:(NSString * _Nonnull)chapter1 chapter2:(NSString * _Nonnull)chapter2 duration:(NSInteger)duration SWIFT_WARN_UNUSED_RESULT;
/// Add a new Audio
/// \param name audio name
///
/// \param chapter1 audio first chapter
///
/// \param chapter2 audio second chapter
///
/// \param chapter3 audio third chapter
///
/// \param duration duration of the track in second
///
///
/// returns:
/// the new Audio instance
- (Audio * _Nonnull)add:(NSString * _Nonnull)name chapter1:(NSString * _Nonnull)chapter1 chapter2:(NSString * _Nonnull)chapter2 chapter3:(NSString * _Nonnull)chapter3 duration:(NSInteger)duration SWIFT_WARN_UNUSED_RESULT;
/// Remove an audio by name
/// \param name audio identified by name
///
- (void)remove:(NSString * _Nonnull)name;
/// Remove all audios
- (void)removeAll;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
@end

/// Background modes
/// <ul>
///   <li>
///     normal: tracking in foreground
///   </li>
///   <li>
///     task: tracking in background
///   </li>
///   <li>
///     fetch: tracking in iOS fetching feature
///   </li>
/// </ul>
typedef SWIFT_ENUM(NSInteger, BackgroundMode) {
/// normal: tracking in foreground
  BackgroundModeNormal = 0,
/// task: tracking in background
  BackgroundModeTask = 1,
/// fetch: tracking in iOS fetching feature
  BackgroundModeFetch = 2,
};


/// Background task
SWIFT_CLASS("_TtC16TrackerExtension14BackgroundTask")
@interface BackgroundTask : NSObject
/// Private initializer (cannot instantiate BackgroundTaskManager)
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
@end


/// Buffer that stores hit parameters
SWIFT_CLASS("_TtC16TrackerExtension6Buffer")
@interface Buffer : NSObject
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
@end


/// Hit builder
SWIFT_CLASS("_TtC16TrackerExtension7Builder")
@interface Builder : NSOperation
/// Sends hit
- (void)main;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
@end



/// Wrapper class for marketing campaign tracking
SWIFT_CLASS("_TtC16TrackerExtension8Campaign")
@interface Campaign : ScreenInfo
/// Campaign id (XTO)
@property (nonatomic, copy) NSString * _Nonnull campaignId;
/// Create a new campaign with an identifier
/// \param campaignId campaignId identifier
///
- (nonnull instancetype)initWithCampaignId:(NSString * _Nonnull)campaignId OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
@end


/// Wrapper class to manage Campaign instances
SWIFT_CLASS("_TtC16TrackerExtension9Campaigns")
@interface Campaigns : NSObject
/// Add tagging data for a campaign
/// \param campaignId campaign identifier
///
///
/// returns:
/// the Campaign instance
- (Campaign * _Nonnull)addWithCampaignId:(NSString * _Nonnull)campaignId SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
@end

@class Products;

/// Wrapper class to manage your cart
SWIFT_CLASS("_TtC16TrackerExtension4Cart")
@interface Cart : BusinessObject
/// Cart identifier
@property (nonatomic, copy) NSString * _Nonnull cartId;
/// Cart products
@property (nonatomic, strong) Products * _Nonnull products;
/// Set a cart
/// \param cartId the cart identifier
///
///
/// returns:
/// the cart
- (Cart * _Nonnull)set:(NSString * _Nonnull)cartId SWIFT_WARN_UNUSED_RESULT;
/// Unset the cart
- (void)unset;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end


/// Tracker configuraiton
SWIFT_CLASS("_TtC16TrackerExtension13Configuration")
@interface Configuration : NSObject
/// Init with default configuration set in the tag delivery ui
///
/// returns:
/// a configuration
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end


/// Global context tracking
SWIFT_CLASS("_TtC16TrackerExtension7Context")
@interface Context : NSObject
/// Global level 2
@property (nonatomic) NSInteger level2;
/// Tracker background mode. See BackgroundMode
@property (nonatomic) enum BackgroundMode backgroundMode;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
@end


/// Wrapper class to inject custom data in you tracking
SWIFT_CLASS("_TtC16TrackerExtension12CustomObject")
@interface CustomObject : BusinessObject
/// custom data as string - json formatted
@property (nonatomic, copy) NSString * _Nonnull json;
/// allow the custom object to persist
@property (nonatomic) BOOL persistent;
- (nonnull instancetype)initWithString:(NSString * _Nonnull)string OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)initWithDictionary:(NSDictionary<NSString *, id> * _Nonnull)dictionary OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
@end


/// Wrapper class to manage custom objects instances
SWIFT_CLASS("_TtC16TrackerExtension13CustomObjects")
@interface CustomObjects : NSObject
/// Add a custom object
/// \param customObject customObject json string value
///
///
/// returns:
/// the custom object instance
- (CustomObject * _Nonnull)addString:(NSString * _Nonnull)customObject;
/// Add a custom object
/// \param customObject customObject in key-value format
///
///
/// returns:
/// the custom object instance
- (CustomObject * _Nonnull)addDictionary:(NSDictionary<NSString *, id> * _Nonnull)customObject;
/// Remove all custom objects
- (void)removeAll;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
@end


/// Wrapper class for custom tree structure tracking
SWIFT_CLASS("_TtC16TrackerExtension19CustomTreeStructure")
@interface CustomTreeStructure : ScreenInfo
/// Custom tree structure first category label
@property (nonatomic) NSInteger category1;
/// Custom tree structure first category label
@property (nonatomic) NSInteger category2;
/// Custom tree structure first category label
@property (nonatomic) NSInteger category3;
/// Create a new CustomTreeStructure
/// \param category1 first custom tree structure category
///
- (nonnull instancetype)initWithCategory1:(NSInteger)category1 OBJC_DESIGNATED_INITIALIZER;
/// Create a new CustomTreeStructure
/// \param category1 first custom tree structure category
///
/// \param category2 second custom tree structure category
///
- (nonnull instancetype)initWithCategory1:(NSInteger)category1 category2:(NSInteger)category2;
/// Create a new CustomTreeStructure
/// \param category1 first custom tree structure category
///
/// \param category2 second custom tree structure category
///
/// \param category3 third custom tree structure category
///
- (nonnull instancetype)initWithCategory1:(NSInteger)category1 category2:(NSInteger)category2 category3:(NSInteger)category3;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
@end


/// Wrapper class to manage custom tree structure instances
SWIFT_CLASS("_TtC16TrackerExtension20CustomTreeStructures")
@interface CustomTreeStructures : NSObject
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
@end


/// Wrapper class to inject custom variables information
SWIFT_CLASS("_TtC16TrackerExtension9CustomVar")
@interface CustomVar : ScreenInfo
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
@end

/// CustomVarType - different type will have a different processing
/// <ul>
///   <li>
///     app: App custom variable type
///   </li>
///   <li>
///     screen: Screen custom variable type
///   </li>
/// </ul>
typedef SWIFT_ENUM(NSInteger, CustomVarType) {
/// app
  CustomVarTypeApp = 0,
/// screen
  CustomVarTypeScreen = 1,
};


/// Wrapper class used to manage CustomVar instances
SWIFT_CLASS("_TtC16TrackerExtension10CustomVars")
@interface CustomVars : NSObject
/// Add a CustomVar
/// \param varId custom variable identifier
///
/// \param value value of the custom variable
///
/// \param type type of the custom variable - See CustomVarType
///
///
/// returns:
/// the new custom var instance
- (CustomVar * _Nonnull)add:(NSInteger)varId value:(NSString * _Nonnull)value type:(enum CustomVarType)type;
/// Remove a custom variable
/// \param customVarId the custom variable identifier
///
- (void)remove:(NSString * _Nonnull)customVarId;
/// Remove all the custom variables
- (void)removeAll;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
@end

enum HitStatus : NSInteger;

/// Sends different events during hit building
SWIFT_PROTOCOL("_TtP16TrackerExtension15TrackerDelegate_")
@protocol TrackerDelegate
@optional
/// Notify when tracker needs first launch approval
/// \param message approval message for confidentiality
///
- (void)trackerNeedsFirstLaunchApproval:(NSString * _Nonnull)message;
/// Notify when hit has been built
/// \param status status of hit building
///
/// \param message query string or error message
///
- (void)buildDidEnd:(enum HitStatus)status message:(NSString * _Nonnull)message;
/// Notify when hit has been sent
/// \param status status of hit sending
///
/// \param message querystring or http response message
///
- (void)sendDidEnd:(enum HitStatus)status message:(NSString * _Nonnull)message;
/// Notify when hit has been saved in device local storage
/// \param message the saved hit
///
- (void)saveDidEnd:(NSString * _Nonnull)message;
/// Notify when a partner has been called
/// \param response the response received from the partner
///
- (void)didCallPartner:(NSString * _Nonnull)response;
/// Notify when a warning has been detected
/// \param message the warning message
///
- (void)warningDidOccur:(NSString * _Nonnull)message;
/// Notify when a critical error has been detected
/// \param message the error message
///
- (void)errorDidOccur:(NSString * _Nonnull)message;
@end


/// Helper to provide a simple tracker delegate that log all messages pushed by the SDK (verbose, warning, error…)
/// Note: tracker.delegate is a weak var, so you have to reference the DefaultTrackerDelegate strongly somewhere.
/// tracker.delegate = DefaultTrackerDelegate() // not working because the variable will be dealloc at the end of the function.
SWIFT_CLASS("_TtC16TrackerExtension22DefaultTrackerDelegate")
@interface DefaultTrackerDelegate : NSObject <TrackerDelegate>
- (void)trackerNeedsFirstLaunchApproval:(NSString * _Nonnull)message;
- (void)buildDidEnd:(enum HitStatus)status message:(NSString * _Nonnull)message;
- (void)sendDidEnd:(enum HitStatus)status message:(NSString * _Nonnull)message;
- (void)saveDidEnd:(NSString * _Nonnull)message;
- (void)didCallPartner:(NSString * _Nonnull)response;
- (void)warningDidOccur:(NSString * _Nonnull)message;
- (void)errorDidOccur:(NSString * _Nonnull)message;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end


SWIFT_CLASS("_TtC16TrackerExtension10Dispatcher")
@interface Dispatcher : NSObject
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
@end


/// Wrapper class for dynamic screen tracking
SWIFT_CLASS("_TtC16TrackerExtension13DynamicScreen")
@interface DynamicScreen : AbstractScreen
/// Dynamic screen identifier
@property (nonatomic, copy) NSString * _Nonnull screenId;
/// Dynamic screen update date
@property (nonatomic, copy) NSDate * _Nonnull update;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end


/// Wrapper class to manage Screen instances
SWIFT_CLASS("_TtC16TrackerExtension14DynamicScreens")
@interface DynamicScreens : NSObject
/// Add a new Dynamic Screen
/// <ul>
///   <li>
///     Deprecated: Use add(screenId: String, update: NSDate, name: String) instead.
///   </li>
/// </ul>
/// \param screenId dynamic screen identifier
///
/// \param update dynamic screen update date
///
/// \param name dynamic screen name
///
///
/// returns:
/// the Dynamic Screen instance
- (DynamicScreen * _Nonnull)add:(NSInteger)screenId update:(NSDate * _Nonnull)update name:(NSString * _Nonnull)name SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_MSG("Use add(screenId: String, update: NSDate, name: String) instead (> 2.2.1). ");
/// Add a new Dynamic Screen
/// \param screenId dynamic screen identifier
///
/// \param update dynamic screen update date
///
/// \param name dynamic screen name
///
///
/// returns:
/// the Dynamic Screen instance
- (DynamicScreen * _Nonnull)addScreen:(NSString * _Nonnull)screenId update:(NSDate * _Nonnull)update name:(NSString * _Nonnull)name SWIFT_WARN_UNUSED_RESULT;
/// Add a new Dynamic Screen
/// <ul>
///   <li>
///     Deprecated: Use add(screenId: String, update: NSDate, name: String, chapter1: String) instead.
///   </li>
/// </ul>
/// \param screenId dynamic screen identifier
///
/// \param update dynamic screen update date
///
/// \param name dynamic screen name
///
/// \param chapter1 screen first chapter
///
///
/// returns:
/// the Dynamic Screen instance
- (DynamicScreen * _Nonnull)add:(NSInteger)screenId update:(NSDate * _Nonnull)update name:(NSString * _Nonnull)name chapter1:(NSString * _Nonnull)chapter1 SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_MSG("Use add(screenId: String, update: NSDate, name: String, chapter1: String) instead (> 2.2.1).");
/// Add a new Dynamic Screen
/// \param screenId dynamic screen identifier
///
/// \param update dynamic screen update date
///
/// \param name dynamic screen name
///
/// \param chapter1 screen first chapter
///
///
/// returns:
/// the Dynamic Screen instance
- (DynamicScreen * _Nonnull)addScreenWith1Chapter:(NSString * _Nonnull)screenId update:(NSDate * _Nonnull)update name:(NSString * _Nonnull)name chapter1:(NSString * _Nonnull)chapter1 SWIFT_WARN_UNUSED_RESULT;
/// Add a new Dynamic Screen
/// <ul>
///   <li>
///     Deprecated: Use add(screenId: String, update: NSDate, name: String, chapter1: String, chapter2: String) instead.
///   </li>
/// </ul>
/// \param screenId dynamic screen identifier
///
/// \param update dynamic screen update date
///
/// \param name dynamic screen name
///
/// \param chapter1 screen first chapter
///
/// \param chapter2 screen second chapter
///
///
/// returns:
/// the Dynamic Screen instance
- (DynamicScreen * _Nonnull)add:(NSInteger)screenId update:(NSDate * _Nonnull)update name:(NSString * _Nonnull)name chapter1:(NSString * _Nonnull)chapter1 chapter2:(NSString * _Nonnull)chapter2 SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_MSG("Use add(screenId: String, update: NSDate, name: String, chapter1: String, chapter2: String) instead (> 2.2.1).");
/// Add a new Dynamic Screen
/// \param screenId dynamic screen identifier
///
/// \param update dynamic screen update date
///
/// \param name dynamic screen name
///
/// \param chapter1 screen first chapter
///
/// \param chapter2 screen second chapter
///
///
/// returns:
/// the Dynamic Screen instance
- (DynamicScreen * _Nonnull)addScreenWith2Chapters:(NSString * _Nonnull)screenId update:(NSDate * _Nonnull)update name:(NSString * _Nonnull)name chapter1:(NSString * _Nonnull)chapter1 chapter2:(NSString * _Nonnull)chapter2 SWIFT_WARN_UNUSED_RESULT;
/// Add a new Dynamic Screen
/// <ul>
///   <li>
///     Deprecated: Use add(screenId: String, update: NSDate, name: String, chapter1: String, chapter2: String, chapter3: String) instead.
///   </li>
/// </ul>
/// \param screenId dynamic screen identifier
///
/// \param update dynamic screen update date
///
/// \param name dynamic screen name
///
/// \param chapter1 screen first chapter
///
/// \param chapter2 screen second chapter
///
/// \param chapter3 screen third chapter
///
///
/// returns:
/// the Dynamic Screen instance
- (DynamicScreen * _Nonnull)add:(NSInteger)screenId update:(NSDate * _Nonnull)update name:(NSString * _Nonnull)name chapter1:(NSString * _Nonnull)chapter1 chapter2:(NSString * _Nonnull)chapter2 chapter3:(NSString * _Nonnull)chapter3 SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_MSG("Use add(screenId: String, update: NSDate, name: String, chapter1: String, chapter2: String, chapter3: String) instead (> 2.2.1).");
/// Add a new Dynamic Screen
/// \param screenId dynamic screen identifier
///
/// \param update dynamic screen update date
///
/// \param name dynamic screen name
///
/// \param chapter1 screen first chapter
///
/// \param chapter2 screen second chapter
///
/// \param chapter3 screen third chapter
///
///
/// returns:
/// the Dynamic Screen instance
- (DynamicScreen * _Nonnull)addScreenWith3Chapters:(NSString * _Nonnull)screenId update:(NSDate * _Nonnull)update name:(NSString * _Nonnull)name chapter1:(NSString * _Nonnull)chapter1 chapter2:(NSString * _Nonnull)chapter2 chapter3:(NSString * _Nonnull)chapter3 SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
@end


SWIFT_CLASS("_TtC16TrackerExtension5Event")
@interface Event : NSObject
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
@end

enum GestureAction : NSInteger;
enum GestureEventType : NSInteger;
@class Screen;

/// Wrapper class for gesture tracking
SWIFT_CLASS("_TtC16TrackerExtension7Gesture")
@interface Gesture : BusinessObject
/// Touch name
@property (nonatomic, copy) NSString * _Nonnull name;
/// First chapter
@property (nonatomic, copy) NSString * _Nullable chapter1;
/// Second chapter
@property (nonatomic, copy) NSString * _Nullable chapter2;
/// Third chapter
@property (nonatomic, copy) NSString * _Nullable chapter3;
/// Level 2
@property (nonatomic) NSInteger level2;
/// Action - See GestureAction
@property (nonatomic) enum GestureAction action;
/// Type of touch - See GestureEventType
@property (nonatomic) enum GestureEventType type;
/// Screen information on which the gesture has been done
@property (nonatomic, weak) Screen * _Nullable screen;
/// Custom objects to add to gesture hit
@property (nonatomic, strong) CustomObjects * _Nonnull customObjects;
/// Internal Search
@property (nonatomic, strong) InternalSearch * _Nullable internalSearch;
/// Send navigation gesture event
/// If the gesture is generated by AutoTracking, do not call this function in the gestureWasDetected delegate, otherwise, the gesture will be sent twice.
- (void)sendNavigation;
/// Send exit gesture event
/// If the gesture is generated by AutoTracking, do not call this function in the gestureWasDetected delegate, otherwise, the gesture will be sent twice.
- (void)sendExit;
/// Send download gesture event
/// If the gesture is generated by AutoTracking, do not call this function in the gestureWasDetected delegate, otherwise, the gesture will be sent twice.
- (void)sendDownload;
/// Send touch gesture event
/// If the gesture is generated by AutoTracking, do not call this function in the gestureWasDetected delegate, otherwise, the gesture will be sent twice.
- (void)sendTouch;
/// Send search gesture event
/// If the gesture is generated by AutoTracking, do not call this function in the gestureWasDetected delegate, otherwise, the gesture will be sent twice.
- (void)sendSearch;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

/// Enum with differents event type
/// <ul>
///   <li>
///     unknown: unknown
///   </li>
///   <li>
///     tap: tap
///   </li>
///   <li>
///     swipe: swipe
///   </li>
///   <li>
///     scroll: scroll
///   </li>
///   <li>
///     pinch: pinch
///   </li>
///   <li>
///     pan: pan
///   </li>
///   <li>
///     rotate: rotate
///   </li>
///   <li>
///     refresh: refresh
///   </li>
/// </ul>
typedef SWIFT_ENUM(NSInteger, GestureEventType) {
/// <ul>
///   <li>
///     unknown: unknown
///   </li>
/// </ul>
  GestureEventTypeUnknown = 0,
/// <ul>
///   <li>
///     tap: tap
///   </li>
/// </ul>
  GestureEventTypeTap = 1,
/// <ul>
///   <li>
///     swipe: swipe
///   </li>
/// </ul>
  GestureEventTypeSwipe = 2,
/// <ul>
///   <li>
///     scroll: scroll
///   </li>
/// </ul>
  GestureEventTypeScroll = 3,
/// <ul>
///   <li>
///     pinch: pinch
///   </li>
/// </ul>
  GestureEventTypePinch = 4,
/// <ul>
///   <li>
///     pan: pan
///   </li>
/// </ul>
  GestureEventTypePan = 5,
/// <ul>
///   <li>
///     rotate: rotate
///   </li>
/// </ul>
  GestureEventTypeRotate = 6,
/// <ul>
///   <li>
///     refresh: refresh
///   </li>
/// </ul>
  GestureEventTypeRefresh = 7,
/// <ul>
///   <li>
///     deviceRotate: deviceRotate
///   </li>
/// </ul>
  GestureEventTypeDeviceRotate = 8,
};

/// Gesture actions
/// <ul>
///   <li>
///     touch: simple gesture
///   </li>
///   <li>
///     navigate: navigation gesture
///   </li>
///   <li>
///     download: download action
///   </li>
///   <li>
///     exit: exit action
///   </li>
///   <li>
///     search: internal search action
///   </li>
/// </ul>
typedef SWIFT_ENUM(NSInteger, GestureAction) {
/// <ul>
///   <li>
///     touch: simple gesture
///   </li>
/// </ul>
  GestureActionTouch = 0,
/// <ul>
///   <li>
///     navigate: navigation gesture
///   </li>
/// </ul>
  GestureActionNavigate = 1,
/// <ul>
///   <li>
///     download: download action
///   </li>
/// </ul>
  GestureActionDownload = 2,
/// <ul>
///   <li>
///     exit: exit action
///   </li>
/// </ul>
  GestureActionExit = 3,
/// <ul>
///   <li>
///     search: internal search action
///   </li>
/// </ul>
  GestureActionSearch = 4,
};


/// Wrapper class to manage Gesture instances
SWIFT_CLASS("_TtC16TrackerExtension8Gestures")
@interface Gestures : NSObject
/// Add a gesture
///
/// returns:
/// a new Gesture instance
- (Gesture * _Nonnull)add SWIFT_WARN_UNUSED_RESULT;
/// Add a Gesture with a name
/// \param name Gesture name
///
///
/// returns:
/// a new Gesture instance
- (Gesture * _Nonnull)add:(NSString * _Nonnull)name SWIFT_WARN_UNUSED_RESULT;
/// Add a gesture with a name and a chapter
/// \param name Gesture name
///
/// \param chapter1 chapter1 label
///
///
/// returns:
/// a new Gesture instance
- (Gesture * _Nonnull)add:(NSString * _Nonnull)name chapter1:(NSString * _Nonnull)chapter1 SWIFT_WARN_UNUSED_RESULT;
/// Add a gesture with a name and chapters
/// \param name Gesture name
///
/// \param chapter1 chapter1 label
///
/// \param chapter2 chapter2 label
///
///
/// returns:
/// a new Gesture instance
- (Gesture * _Nonnull)add:(NSString * _Nonnull)name chapter1:(NSString * _Nonnull)chapter1 chapter2:(NSString * _Nonnull)chapter2 SWIFT_WARN_UNUSED_RESULT;
/// Add a gesture with a name and chapters
/// \param name Gesture name
///
/// \param chapter1 chapter1 label
///
/// \param chapter2 chapter2 label
///
/// \param chapter3 chapter3 label
///
///
/// returns:
/// a new Gesture instance
- (Gesture * _Nonnull)add:(NSString * _Nonnull)name chapter1:(NSString * _Nonnull)chapter1 chapter2:(NSString * _Nonnull)chapter2 chapter3:(NSString * _Nonnull)chapter3 SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
@end

@class NSNumber;
enum HitType : NSInteger;

/// Class to provide Hit information. A hit is an HTTP request with a querystring containing all tracking information.
SWIFT_CLASS("_TtC16TrackerExtension3Hit")
@interface Hit : NSObject
/// Hit url
@property (nonatomic, copy) NSString * _Nonnull url;
/// Date of creation
@property (nonatomic, copy) NSDate * _Nonnull creationDate;
/// Number of retry that were made to send the hit
@property (nonatomic, strong) NSNumber * _Nonnull retryCount;
/// Indicates wheter the hit comes from storage
@property (nonatomic) BOOL isOffline;
/// Hit type - See HitType
@property (nonatomic, readonly) enum HitType type;
/// Description
@property (nonatomic, readonly, copy) NSString * _Nonnull text;
/// Default initializer
- (nonnull instancetype)init;
/// Init hit with url
- (nonnull instancetype)initWithUrl:(NSString * _Nonnull)url OBJC_DESIGNATED_INITIALIZER;
/// Get the hit type depending on the hit url
/// :params: an url
///
/// returns:
/// type of hit
- (enum HitType)getHitType SWIFT_WARN_UNUSED_RESULT;
@end

/// HitType Enum
/// <ul>
///   <li>
///     unknown: unknown
///   </li>
///   <li>
///     screen: screen
///   </li>
///   <li>
///     touch: touch
///   </li>
///   <li>
///     audio: audio
///   </li>
///   <li>
///     video: video
///   </li>
///   <li>
///     animation: animation
///   </li>
///   <li>
///     podCast: podCast
///   </li>
///   <li>
///     rss: rss
///   </li>
///   <li>
///     email: email
///   </li>
///   <li>
///     advertising: advertising
///   </li>
///   <li>
///     adTracking: adTracking
///   </li>
///   <li>
///     productDisplay: productDisplay
///   </li>
///   <li>
///     weborama: weborama
///   </li>
///   <li>
///     mvTesting: mvTesting
///   </li>
/// </ul>
typedef SWIFT_ENUM(NSInteger, HitType) {
  HitTypeUnknown = 0,
/// screen
  HitTypeScreen = 1,
/// touch
  HitTypeTouch = 2,
/// audio
  HitTypeAudio = 3,
/// video
  HitTypeVideo = 4,
/// animation
  HitTypeAnimation = 5,
/// podcast
  HitTypePodCast = 6,
/// rss
  HitTypeRss = 7,
/// email
  HitTypeEmail = 8,
/// advertising
  HitTypeAdvertising = 9,
/// adTracking
  HitTypeAdTracking = 10,
/// productDisplay
  HitTypeProductDisplay = 11,
/// weborama
  HitTypeWeborama = 12,
/// mvTesting
  HitTypeMvTesting = 13,
};

/// Build or send status of the hit
/// <ul>
///   <li>
///     failed: failed
///   </li>
///   <li>
///     success: success
///   </li>
/// </ul>
typedef SWIFT_ENUM(NSInteger, HitStatus) {
/// failed
  HitStatusFailed = 0,
/// success
  HitStatusSuccess = 1,
};


/// Wrapper class for identified visitor tracking
SWIFT_CLASS("_TtC16TrackerExtension17IdentifiedVisitor")
@interface IdentifiedVisitor : NSObject
/// Set Identified visitor ID (numeric) for the current session
/// \param visitorId numeric identifier
///
///
/// returns:
/// the tracker instance
- (Tracker * _Nonnull)setInt:(NSInteger)visitorId;
/// Set Identified visitor for the current session
/// \param visitorId numeric identifier
///
/// \param visitorCategory visitorCategory
///
///
/// returns:
/// the tracker instance
- (Tracker * _Nonnull)setInt:(NSInteger)visitorId visitorCategory:(NSInteger)visitorCategory;
/// Set Identified visitor for the current session
/// \param visitorId visitorId textual identifier
///
///
/// returns:
/// the tracker instance
- (Tracker * _Nonnull)setString:(NSString * _Nonnull)visitorId;
/// Set Identified visitor for the current session
/// \param visitorId visitorId textual identifier
///
/// \param visitorCategory visitorCategory
///
///
/// returns:
/// the tracker instance
- (Tracker * _Nonnull)setString:(NSString * _Nonnull)visitorId visitorCategory:(NSInteger)visitorCategory;
/// Unset identified visitor data. Identified visitor parameters won’t appear in next hits
///
/// returns:
/// tracker instance
- (Tracker * _Nonnull)unset;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
@end


/// Wrapper class for internal search tracking
SWIFT_CLASS("_TtC16TrackerExtension14InternalSearch")
@interface InternalSearch : BusinessObject
/// Searched keywords
@property (nonatomic, copy) NSString * _Nonnull keyword;
/// Number of page result
@property (nonatomic) NSInteger resultScreenNumber;
/// Position of result in list
@property (nonatomic) NSInteger resultPosition;
/// Create a new InternalSearch
/// \param keyword internal search keyword
///
/// \param resultScreenNumber number of screens returned
///
- (nonnull instancetype)initWithKeyword:(NSString * _Nonnull)keyword resultScreenNumber:(NSInteger)resultScreenNumber OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
@end


/// Wrapper class to managed
SWIFT_CLASS("_TtC16TrackerExtension16InternalSearches")
@interface InternalSearches : NSObject
/// Add an internal search
/// \param keyword keyword search
///
/// \param resultScreenNumber page number result
///
///
/// returns:
/// a new internal search instance
- (InternalSearch * _Nonnull)add:(NSString * _Nonnull)keyword resultScreenNumber:(NSInteger)resultScreenNumber SWIFT_WARN_UNUSED_RESULT;
/// Add an internal search
/// \param keyword keyword search
///
/// \param resultScreenNumber page number result
///
/// \param resultPosition the result position in the list
///
///
/// returns:
/// a new internal search instance
- (InternalSearch * _Nonnull)add:(NSString * _Nonnull)keyword resultScreenNumber:(NSInteger)resultScreenNumber resultPosition:(NSInteger)resultPosition SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
@end


/// Life cycle metrics
SWIFT_CLASS("_TtC16TrackerExtension9LifeCycle")
@interface LifeCycle : NSObject
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end


/// Wrapper class for live audio tracking
SWIFT_CLASS("_TtC16TrackerExtension9LiveAudio")
@interface LiveAudio : RichMedia
/// Media type
@property (nonatomic, readonly, copy) NSString * _Nonnull type;
@end


/// Wrapper class to manage LiveAudio instances
SWIFT_CLASS("_TtC16TrackerExtension10LiveAudios")
@interface LiveAudios : NSObject
@property (nonatomic, copy) NSDictionary<NSString *, LiveAudio *> * _Nonnull list;
/// MediaPlayer instance
@property (nonatomic, strong) MediaPlayer * _Nonnull player;
/// LiveAudios initializer
/// \param player the player instance
///
///
/// returns:
/// LiveAudios instance
- (nonnull instancetype)initWithPlayer:(MediaPlayer * _Nonnull)player OBJC_DESIGNATED_INITIALIZER;
/// Add a new live audio
/// \param name audio name
///
///
/// returns:
/// new live audio instance
- (LiveAudio * _Nonnull)add:(NSString * _Nonnull)name SWIFT_WARN_UNUSED_RESULT;
/// Add a new live audio
/// \param name name
///
/// \param chapter1 chapter1 label
///
///
/// returns:
/// new live audio instance
- (LiveAudio * _Nonnull)add:(NSString * _Nonnull)name chapter1:(NSString * _Nonnull)chapter1 SWIFT_WARN_UNUSED_RESULT;
/// Add a new live audio
/// \param name name
///
/// \param chapter1 chapter1 label
///
/// \param chapter2 chapter2 label
///
///
/// returns:
/// a new live audio instance
- (LiveAudio * _Nonnull)add:(NSString * _Nonnull)name chapter1:(NSString * _Nonnull)chapter1 chapter2:(NSString * _Nonnull)chapter2 SWIFT_WARN_UNUSED_RESULT;
/// Add a new live audio
/// \param name name
///
/// \param chapter1 chapter1 label
///
/// \param chapter2 chapter2 label
///
/// \param chapter3 chapter3 label
///
///
/// returns:
/// a new live audio instance
- (LiveAudio * _Nonnull)add:(NSString * _Nonnull)name chapter1:(NSString * _Nonnull)chapter1 chapter2:(NSString * _Nonnull)chapter2 chapter3:(NSString * _Nonnull)chapter3 SWIFT_WARN_UNUSED_RESULT;
/// Remove a live audio
/// \param name name
///
- (void)remove:(NSString * _Nonnull)name;
/// Remove all live audios
- (void)removeAll;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
@end


/// Wrapper class for Live Video tracking
SWIFT_CLASS("_TtC16TrackerExtension9LiveVideo")
@interface LiveVideo : RichMedia
@end


/// Wrapper class to manage Live Audio instances
SWIFT_CLASS("_TtC16TrackerExtension10LiveVideos")
@interface LiveVideos : NSObject
/// Add a new live video
/// \param name live name
///
///
/// returns:
/// the new live video instance
- (LiveVideo * _Nonnull)add:(NSString * _Nonnull)name SWIFT_WARN_UNUSED_RESULT;
/// Add a new live video
/// \param name name
///
/// \param chapter1 chapter1 label
///
///
/// returns:
/// a new live video instance
- (LiveVideo * _Nonnull)add:(NSString * _Nonnull)name chapter1:(NSString * _Nonnull)chapter1 SWIFT_WARN_UNUSED_RESULT;
/// Add a new live video
/// \param name name
///
/// \param chapter1 chapter1 label
///
/// \param chapter2 chapter2 label
///
///
/// returns:
/// the new live video instance
- (LiveVideo * _Nonnull)add:(NSString * _Nonnull)name chapter1:(NSString * _Nonnull)chapter1 chapter2:(NSString * _Nonnull)chapter2 SWIFT_WARN_UNUSED_RESULT;
/// Add a new live video
/// \param name name
///
/// \param chapter1 chapter1 label
///
/// \param chapter2 chapter2 label
///
/// \param chapter3 chapter3 label
///
///
/// returns:
/// a new live video instance
- (LiveVideo * _Nonnull)add:(NSString * _Nonnull)name chapter1:(NSString * _Nonnull)chapter1 chapter2:(NSString * _Nonnull)chapter2 chapter3:(NSString * _Nonnull)chapter3 SWIFT_WARN_UNUSED_RESULT;
/// Remove a live video
/// \param video video name
///
- (void)remove:(NSString * _Nonnull)name;
/// Remove all live videos
- (void)removeAll;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
@end


/// Wrapper class for gps location tracking
SWIFT_CLASS("_TtC16TrackerExtension8Location")
@interface Location : ScreenInfo
/// latitude
@property (nonatomic) double latitude;
/// longitude
@property (nonatomic) double longitude;
- (nonnull instancetype)initWithLatitude:(double)latitude longitude:(double)longitude OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
@end


/// /// Wrapper class to manage Locations instances
SWIFT_CLASS("_TtC16TrackerExtension9Locations")
@interface Locations : NSObject
/// Tracker instance
@property (nonatomic, strong) Tracker * _Nonnull tracker;
/// Locations initializer
/// \param tracker the tracker instance
///
///
/// returns:
/// Locations instance
- (nonnull instancetype)initWithTracker:(Tracker * _Nonnull)tracker OBJC_DESIGNATED_INITIALIZER;
/// Add a location
/// \param latitude latitude x
///
/// \param longitude longitude y
///
///
/// returns:
/// a new location instance
- (Location * _Nonnull)add:(double)latitude longitude:(double)longitude SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
@end

@class Videos;

/// Wrapper class to manage rich media tracking
SWIFT_CLASS("_TtC16TrackerExtension11MediaPlayer")
@interface MediaPlayer : NSObject
/// Player ID
@property (nonatomic) NSInteger playerId;
/// List of videos attached to this player
@property (nonatomic, strong) Videos * _Nonnull videos;
/// List of audios attached to this player
@property (nonatomic, strong) Audios * _Nonnull audios;
/// List of live videos attached to this player
@property (nonatomic, strong) LiveVideos * _Nonnull liveVideos;
/// List of live audios attached to this player
@property (nonatomic, strong) LiveAudios * _Nonnull liveAudios;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
@end


/// Wrapper class to manage media players
SWIFT_CLASS("_TtC16TrackerExtension12MediaPlayers")
@interface MediaPlayers : NSObject
/// Add a new Media Player
///
/// returns:
/// the new MediaPlayer instance
- (MediaPlayer * _Nonnull)add SWIFT_WARN_UNUSED_RESULT;
/// Add a new Media Player
/// \param playerId the player identifier
///
///
/// returns:
/// the new MediaPlayer instance
- (MediaPlayer * _Nonnull)add:(NSInteger)playerId SWIFT_WARN_UNUSED_RESULT;
/// Remove a MediaPlayer by ID
/// \param playerId the player identifier
///
- (void)remove:(NSInteger)playerId;
/// Remove all MediaPlayer and stop every players
- (void)removeAll;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
@end




/// Wrapper class to enable NuggAd partner usage
SWIFT_CLASS("_TtC16TrackerExtension6NuggAd")
@interface NuggAd : BusinessObject
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end


/// Wrapper class to manage NuggAd instances
SWIFT_CLASS("_TtC16TrackerExtension7NuggAds")
@interface NuggAds : NSObject
/// Add NuggAd data
/// \param data NuggAd response data
///
///
/// returns:
/// NuggAd instance
- (NuggAd * _Nonnull)add:(NSDictionary<NSString *, id> * _Nonnull)data SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
@end


/// Class to manage offline hits stored
SWIFT_CLASS("_TtC16TrackerExtension7Offline")
@interface Offline : NSObject
/// Send all hits stored
- (void)dispatch;
/// Get all offline hits stored in database
///
/// returns:
/// collection of offline hits
- (NSArray<Hit *> * _Nonnull)get SWIFT_WARN_UNUSED_RESULT;
/// Get the number of offline hits stored in database
///
/// returns:
/// number of offline hits
- (NSInteger)count SWIFT_WARN_UNUSED_RESULT;
/// Delete all offline hits stored in database
///
/// returns:
/// number of deleted hits (-1 if an error occured)
- (NSInteger)delete SWIFT_WARN_UNUSED_RESULT;
/// Delete offline hits older than the number of days passed in parameter
/// \param olderThan Number of days of offline hits to keep in database
///
///
/// returns:
/// number of deleted hits (-1 if an error occured)
- (NSInteger)deleteOlderThanInt:(NSInteger)olderThan SWIFT_WARN_UNUSED_RESULT;
/// Delete offline hits older than the date passed in parameter
/// \param olderThan Date from which the hits will be deleted
///
///
/// returns:
/// number of deleted hits (-1 if an error occured)
- (NSInteger)deleteOlderThanDate:(NSDate * _Nonnull)olderThan SWIFT_WARN_UNUSED_RESULT;
/// Get the first hit stored in database
///
/// returns:
/// the oldest hit
- (Hit * _Nullable)oldest SWIFT_WARN_UNUSED_RESULT;
/// Get the latest hit stored in database
///
/// returns:
/// the latest hit
- (Hit * _Nullable)latest SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
@end

enum OnAppAdAction : NSInteger;

/// Abstract class to manage Advertising tracking
SWIFT_CLASS("_TtC16TrackerExtension7OnAppAd")
@interface OnAppAd : BusinessObject
/// Action
@property (nonatomic) enum OnAppAdAction action;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

/// Action types
/// <ul>
///   <li>
///     view: Ad tracking impression
///   </li>
///   <li>
///     touch: Ad tracking touch
///   </li>
/// </ul>
typedef SWIFT_ENUM(NSInteger, OnAppAdAction) {
  OnAppAdActionView = 0,
  OnAppAdActionTouch = 1,
};

@class OrderDiscount;
@class OrderAmount;
@class OrderDelivery;
@class OrderCustomVars;

/// Wrapper class to manage SalesTracker Order feature
SWIFT_CLASS("_TtC16TrackerExtension5Order")
@interface Order : BusinessObject
/// Order Id
@property (nonatomic, copy) NSString * _Nonnull orderId;
/// Turnover
@property (nonatomic) double turnover;
/// Status
@property (nonatomic) NSInteger status;
/// Discount
@property (nonatomic, strong) OrderDiscount * _Nonnull discount;
/// Amount
@property (nonatomic, strong) OrderAmount * _Nonnull amount;
/// Delivery info
@property (nonatomic, strong) OrderDelivery * _Nonnull delivery;
/// Custom variables
@property (nonatomic, strong) OrderCustomVars * _Nonnull customVariables;
/// New Customer
@property (nonatomic) BOOL isNewCustomer;
/// Payment method
@property (nonatomic) NSInteger paymentMethod;
/// Requires confirmation
@property (nonatomic) BOOL isConfirmationRequired;
/// Create a new Order
/// \param orderId order identifier
///
/// \param turnover order turnover
///
- (nonnull instancetype)initWithOrderId:(NSString * _Nonnull)orderId turnover:(double)turnover OBJC_DESIGNATED_INITIALIZER;
/// Create a new Order
/// \param orderId order identifier
///
/// \param turnover order turnover
///
/// \param status order status 0=No information, 1=Pending, 2=cancelled, 3=approved, 4=return
///
- (nonnull instancetype)initWithOrderId:(NSString * _Nonnull)orderId turnover:(double)turnover status:(NSInteger)status;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
@end


/// Wrapper class to manage specific order amount feature
SWIFT_CLASS("_TtC16TrackerExtension11OrderAmount")
@interface OrderAmount : NSObject
/// Amount without tax
@property (nonatomic) double amountTaxFree;
/// Amount with tax
@property (nonatomic) double amountTaxIncluded;
/// Tax amount
@property (nonatomic) double taxAmount;
/// Attach amount object to order
/// \param amountTaxFree amount value tax free
///
/// \param amountTaxIncluded amount value tax included
///
/// \param taxAmount tax amount
///
///
/// returns:
/// the Order instance
- (Order * _Nonnull)set:(double)amountTaxFree amountTaxIncluded:(double)amountTaxIncluded taxAmount:(double)taxAmount SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
@end


/// Wrapper class for tracking order custom variables
SWIFT_CLASS("_TtC16TrackerExtension14OrderCustomVar")
@interface OrderCustomVar : NSObject
/// Custom var identifier
@property (nonatomic) NSInteger varId;
/// Custom var value
@property (nonatomic, copy) NSString * _Nonnull value;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
@end


/// Wrapper class to manage OrderCustomVar instances
SWIFT_CLASS("_TtC16TrackerExtension15OrderCustomVars")
@interface OrderCustomVars : NSObject
/// Add a custom var
/// \param varId custom var identifier
///
/// \param value custom var value
///
///
/// returns:
/// the OrderCustomVar instance
- (OrderCustomVar * _Nonnull)add:(NSInteger)varId value:(NSString * _Nonnull)value SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
@end


/// Wrapper class to manage specific order delivery feature
SWIFT_CLASS("_TtC16TrackerExtension13OrderDelivery")
@interface OrderDelivery : NSObject
/// Shipping fees with tax
@property (nonatomic) double shippingFeesTaxIncluded;
/// Shipping fees without tax
@property (nonatomic) double shippingFeesTaxFree;
/// Delivery method
@property (nonatomic, copy) NSString * _Nullable deliveryMethod;
/// Attach delivery to order
/// \param shippingFeesTaxFree shipping fees tax free
///
/// \param shippingFeesTaxIncluded shipping fees tax included
///
/// \param deliveryMethod delivery method
///
///
/// returns:
/// the Order instance
- (Order * _Nonnull)set:(double)shippingFeesTaxFree shippingFeesTaxIncluded:(double)shippingFeesTaxIncluded deliveryMethod:(NSString * _Nonnull)deliveryMethod SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
@end


/// Wrapper class to manage specific order discount feature
SWIFT_CLASS("_TtC16TrackerExtension13OrderDiscount")
@interface OrderDiscount : NSObject
/// Discount with tax
@property (nonatomic) double discountTaxIncluded;
/// Discount without tax
@property (nonatomic) double discountTaxFree;
/// Promotional code
@property (nonatomic, copy) NSString * _Nullable promotionalCode;
/// Attach discount to order
/// \param discountTaxFree discount value tax free
///
/// \param discountTaxIncluded discount value tax included
///
/// \param promotionalCode promotional code
///
///
/// returns:
/// the Order instance
- (Order * _Nonnull)set:(double)discountTaxFree discountTaxIncluded:(double)discountTaxIncluded promotionalCode:(NSString * _Nonnull)promotionalCode SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
@end


/// Wrapper class to manage Orders instances
SWIFT_CLASS("_TtC16TrackerExtension6Orders")
@interface Orders : NSObject
/// Add an order
/// \param orderId order identifier
///
/// \param turnover order turnover
///
///
/// returns:
/// Order instance
- (Order * _Nonnull)add:(NSString * _Nonnull)orderId turnover:(double)turnover;
/// Add an order
/// <ul>
///   <li>
///     Parameters:
///   </li>
///   <li>
///     orderId: order identifier
///   </li>
///   <li>
///     turnover: order turnover
///   </li>
///   <li>
///     status: order status. 0=No information, 1=Pending, 2=cancelled, 3=approved, 4=return
///   </li>
/// </ul>
///
/// returns:
/// Order instance
- (Order * _Nonnull)add:(NSString * _Nonnull)orderId turnover:(double)turnover status:(NSInteger)status;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
@end


/// Hit parameter
SWIFT_CLASS("_TtC16TrackerExtension5Param")
@interface Param : NSObject
/// Default initializer
///
/// returns:
/// a parameter with no key and no value
- (nonnull instancetype)init;
@end


/// Parameter option
SWIFT_CLASS("_TtC16TrackerExtension11ParamOption")
@interface ParamOption : NSObject
/// Relative parameter
@property (nonatomic, copy) NSString * _Nullable relativeParameterKey;
/// Separator to be used when the value of the parameter is of type Array
@property (nonatomic, copy) NSString * _Nonnull separator;
/// Indicates if value must be percent encoded or not
@property (nonatomic) BOOL encode;
/// Indicates if parameter must be reused in future hits
@property (nonatomic) BOOL persistent;
/// Indicates if value must be appended to the old value of parameter
@property (nonatomic) BOOL append;
/// Default initializer
///
/// returns:
/// a parameter option
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end


/// Plugin management
SWIFT_CLASS("_TtC16TrackerExtension6Plugin")
@interface Plugin : NSObject
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
@end


/// Plugin parameter
SWIFT_CLASS("_TtC16TrackerExtension11PluginParam")
@interface PluginParam : NSObject
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end


/// Known hit type
SWIFT_CLASS("_TtC16TrackerExtension16ProcessedHitType")
@interface ProcessedHitType : NSObject
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

enum ProductAction : NSInteger;

/// Wrapper class for tracking product
SWIFT_CLASS("_TtC16TrackerExtension7Product")
@interface Product : BusinessObject
/// Product identifier
@property (nonatomic, copy) NSString * _Nonnull productId;
/// First Product category
@property (nonatomic, copy) NSString * _Nullable category1;
@property (nonatomic, copy) NSString * _Nullable category2;
@property (nonatomic, copy) NSString * _Nullable category3;
@property (nonatomic, copy) NSString * _Nullable category4;
@property (nonatomic, copy) NSString * _Nullable category5;
@property (nonatomic, copy) NSString * _Nullable category6;
/// Product quantity
@property (nonatomic) NSInteger quantity;
/// Product unit price with tax
@property (nonatomic) double unitPriceTaxIncluded;
/// Product unit price without tax
@property (nonatomic) double unitPriceTaxFree;
/// Discount value with tax
@property (nonatomic) double discountTaxIncluded;
/// Discount value without tax
@property (nonatomic) double discountTaxFree;
/// Promotional code
@property (nonatomic, copy) NSString * _Nullable promotionalCode;
/// Action
@property (nonatomic) enum ProductAction action;
@property (nonatomic, strong) CustomObjects * _Nonnull customObjects;
/// Send products view hit
- (void)sendView;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

/// Actions
typedef SWIFT_ENUM(NSInteger, ProductAction) {
  ProductActionView = 0,
};


/// Wrapper class to manage Product instances
SWIFT_CLASS("_TtC16TrackerExtension8Products")
@interface Products : NSObject
/// Add a product
/// \param product a product instance
///
///
/// returns:
/// the product added
- (Product * _Nonnull)add:(Product * _Nonnull)product SWIFT_WARN_UNUSED_RESULT;
/// Add a product
/// \param productId the product identifier
///
///
/// returns:
/// the new product instance
- (Product * _Nonnull)addString:(NSString * _Nonnull)productId SWIFT_WARN_UNUSED_RESULT;
/// Add a product
/// \param productId the product identifier
///
/// \param category1 category1 label
///
///
/// returns:
/// the new product instance
- (Product * _Nonnull)add:(NSString * _Nonnull)productId category1:(NSString * _Nonnull)category1 SWIFT_WARN_UNUSED_RESULT;
/// Add a product
/// \param productId the product identifier
///
/// \param category1 category1 label
///
/// \param category2 category2 label
///
///
/// returns:
/// the new product instance
- (Product * _Nonnull)add:(NSString * _Nonnull)productId category1:(NSString * _Nonnull)category1 category2:(NSString * _Nonnull)category2 SWIFT_WARN_UNUSED_RESULT;
/// Add a product
/// \param productId the product identifier
///
/// \param category1 category1 label
///
/// \param category2 category2 label
///
/// \param category3 category3 label
///
///
/// returns:
/// the new product instance
- (Product * _Nonnull)add:(NSString * _Nonnull)productId category1:(NSString * _Nonnull)category1 category2:(NSString * _Nonnull)category2 category3:(NSString * _Nonnull)category3 SWIFT_WARN_UNUSED_RESULT;
/// Add a product
/// \param productId the product identifier
///
/// \param category1 category1 label
///
/// \param category2 category2 label
///
/// \param category3 category3 label
///
/// \param category4 category4 label
///
///
/// returns:
/// the new product instance
- (Product * _Nonnull)add:(NSString * _Nonnull)productId category1:(NSString * _Nonnull)category1 category2:(NSString * _Nonnull)category2 category3:(NSString * _Nonnull)category3 category4:(NSString * _Nonnull)category4 SWIFT_WARN_UNUSED_RESULT;
/// Add a product
/// \param productId the product identifier
///
/// \param category1 category1 label
///
/// \param category2 category2 label
///
/// \param category3 category3 label
///
/// \param category4 category4 label
///
/// \param category5 category5 label
///
///
/// returns:
/// the new product instance
- (Product * _Nonnull)add:(NSString * _Nonnull)productId category1:(NSString * _Nonnull)category1 category2:(NSString * _Nonnull)category2 category3:(NSString * _Nonnull)category3 category4:(NSString * _Nonnull)category4 category5:(NSString * _Nonnull)category5 SWIFT_WARN_UNUSED_RESULT;
/// Add a product
/// \param productId the product identifier
///
/// \param category1 category1 label
///
/// \param category2 category2 label
///
/// \param category3 category3 label
///
/// \param category4 category4 label
///
/// \param category5 category5 label
///
/// \param category6 category6 label
///
///
/// returns:
/// the new product instance
- (Product * _Nonnull)add:(NSString * _Nonnull)productId category1:(NSString * _Nonnull)category1 category2:(NSString * _Nonnull)category2 category3:(NSString * _Nonnull)category3 category4:(NSString * _Nonnull)category4 category5:(NSString * _Nonnull)category5 category6:(NSString * _Nonnull)category6 SWIFT_WARN_UNUSED_RESULT;
/// Remove a product
/// \param productId the product identifier
///
- (void)remove:(NSString * _Nonnull)productId;
/// Remove all the products
- (void)removeAll;
/// Send viewed products
- (void)sendViews;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
@end


/// Wrapper class for Publisher (ads) tracking
SWIFT_CLASS("_TtC16TrackerExtension9Publisher")
@interface Publisher : OnAppAd
/// Campaign identifier
@property (nonatomic, copy) NSString * _Nonnull campaignId;
/// Creation
@property (nonatomic, copy) NSString * _Nullable creation;
/// Variant
@property (nonatomic, copy) NSString * _Nullable variant;
/// Format
@property (nonatomic, copy) NSString * _Nullable format;
/// General placement
@property (nonatomic, copy) NSString * _Nullable generalPlacement;
/// Detailed placement
@property (nonatomic, copy) NSString * _Nullable detailedPlacement;
/// Advertiser identifier
@property (nonatomic, copy) NSString * _Nullable advertiserId;
/// URL
@property (nonatomic, copy) NSString * _Nullable url;
@property (nonatomic, strong) CustomObjects * _Nonnull customObjects;
/// Send publisher touch hit
- (void)sendTouch;
/// Send publisher view hit
- (void)sendImpression;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end


/// Wrapper class for publisher impression tracking. They are attached to a Screen
SWIFT_CLASS("_TtC16TrackerExtension19PublisherImpression")
@interface PublisherImpression : ScreenInfo
/// Campaign identifier
@property (nonatomic, copy) NSString * _Nonnull campaignId;
/// Creation
@property (nonatomic, copy) NSString * _Nullable creation;
/// Variant
@property (nonatomic, copy) NSString * _Nullable variant;
/// Format
@property (nonatomic, copy) NSString * _Nullable format;
/// General placement
@property (nonatomic, copy) NSString * _Nullable generalPlacement;
/// Detailed placement
@property (nonatomic, copy) NSString * _Nullable detailedPlacement;
/// Advertiser identifier
@property (nonatomic, copy) NSString * _Nullable advertiserId;
/// URL
@property (nonatomic, copy) NSString * _Nullable url;
/// Create a PublisherImpression with a campaignId
/// \param campaignId campaign identifier
///
- (nonnull instancetype)initWithCampaignId:(NSString * _Nonnull)campaignId OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
@end


/// Wrapper class to manage PublisherImpressions instances
SWIFT_CLASS("_TtC16TrackerExtension20PublisherImpressions")
@interface PublisherImpressions : NSObject
/// Add a publisher
/// \param campaignId campaign identifier
///
///
/// returns:
/// the new publisher instance
- (PublisherImpression * _Nonnull)add:(NSString * _Nonnull)campaignId;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
@end


/// Wrapper class to manage Publisher instances
SWIFT_CLASS("_TtC16TrackerExtension10Publishers")
@interface Publishers : NSObject
/// Add a publisher
/// \param campaignId campaign identifier
///
///
/// returns:
/// the new Publisher instance
- (Publisher * _Nonnull)add:(NSString * _Nonnull)campaignId;
/// Send publisher views hits
- (void)sendImpressions;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
@end


/// Read only parameter
SWIFT_CLASS("_TtC16TrackerExtension13ReadOnlyParam")
@interface ReadOnlyParam : NSObject
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end



/// Wrapper class for screen tracking
SWIFT_CLASS("_TtC16TrackerExtension6Screen")
@interface Screen : AbstractScreen
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end



/// Wrapper class to manage Screen instances
SWIFT_CLASS("_TtC16TrackerExtension7Screens")
@interface Screens : NSObject
- (Screen * _Nonnull)addWithScreen:(Screen * _Nonnull)screen SWIFT_WARN_UNUSED_RESULT;
/// Add a new screen
///
/// returns:
/// the Screen instance
- (Screen * _Nonnull)add SWIFT_WARN_UNUSED_RESULT;
/// Add a new Screen
/// \param name the screen name
///
///
/// returns:
/// the Screen instance
- (Screen * _Nonnull)add:(NSString * _Nonnull)name SWIFT_WARN_UNUSED_RESULT;
/// Add a new Screen
/// \param name the screen name
///
/// \param chapter1 screen first chapter
///
///
/// returns:
/// the Screen instance
- (Screen * _Nonnull)add:(NSString * _Nonnull)name chapter1:(NSString * _Nonnull)chapter1 SWIFT_WARN_UNUSED_RESULT;
/// Add a new Screen
/// \param name the screen name
///
/// \param chapter1 screen first chapter
///
/// \param chapter2 screen second chapter
///
///
/// returns:
/// the Screen instance
- (Screen * _Nonnull)add:(NSString * _Nonnull)name chapter1:(NSString * _Nonnull)chapter1 chapter2:(NSString * _Nonnull)chapter2 SWIFT_WARN_UNUSED_RESULT;
/// Add a new Screen
/// \param name the screen name
///
/// \param chapter1 screen first chapter
///
/// \param chapter2 screen second chapter
///
/// \param chapter3 screen third chapter
///
///
/// returns:
/// the Screen instance
- (Screen * _Nonnull)add:(NSString * _Nonnull)name chapter1:(NSString * _Nonnull)chapter1 chapter2:(NSString * _Nonnull)chapter2 chapter3:(NSString * _Nonnull)chapter3 SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
@end


/// manage self promotion tracking
SWIFT_CLASS("_TtC16TrackerExtension13SelfPromotion")
@interface SelfPromotion : OnAppAd
/// Advertising identifier
@property (nonatomic) NSInteger adId;
/// Advertising format
@property (nonatomic, copy) NSString * _Nullable format;
/// Product identifier
@property (nonatomic, copy) NSString * _Nullable productId;
/// Get a wrapper for Custom objects management
@property (nonatomic, strong) CustomObjects * _Nonnull customObjects;
/// Send self promotion touch hit
- (void)sendTouch;
/// Send self promotion view hit
- (void)sendImpression;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end


/// self promotion impression tracking
SWIFT_CLASS("_TtC16TrackerExtension23SelfPromotionImpression")
@interface SelfPromotionImpression : ScreenInfo
/// Advertising identifier
@property (nonatomic) NSInteger adId;
/// Advertising format
@property (nonatomic, copy) NSString * _Nullable format;
/// Product identifier
@property (nonatomic, copy) NSString * _Nullable productId;
/// Constructor
/// \param adId Advertising identifier
///
- (nonnull instancetype)initWithAdId:(NSInteger)adId OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
@end


/// Wrapper class to manage Self Promotion Impressions
SWIFT_CLASS("_TtC16TrackerExtension24SelfPromotionImpressions")
@interface SelfPromotionImpressions : NSObject
/// Add a SelfPromotionImpression
/// \param adId Advertiser indentifier
///
///
/// returns:
/// the new SelfPromotionImpression
- (SelfPromotionImpression * _Nonnull)add:(NSInteger)adId SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
@end


/// Wrapper class to manage Self Promotion instances
SWIFT_CLASS("_TtC16TrackerExtension14SelfPromotions")
@interface SelfPromotions : NSObject
/// Add a SelfPromotion advertising
/// \param adId advertiser identifier
///
///
/// returns:
/// the new SelfPromotion instance
- (SelfPromotion * _Nonnull)add:(NSInteger)adId;
/// Send all impressions
- (void)sendImpressions;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
@end


/// Hit sender
SWIFT_CLASS("_TtC16TrackerExtension6Sender")
@interface Sender : NSOperation
/// Main function of NSOperation
- (void)main;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
@end


/// Slice ready parameter
SWIFT_CLASS("_TtC16TrackerExtension15SliceReadyParam")
@interface SliceReadyParam : NSObject
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

@class NSEntityDescription;
@class NSManagedObjectContext;

/// Stored Offline hit
SWIFT_CLASS("_TtC16TrackerExtension16StoredOfflineHit")
@interface StoredOfflineHit : NSManagedObject
/// Hit
@property (nonatomic, copy) NSString * _Nonnull hit;
/// Date of creation
@property (nonatomic, copy) NSDate * _Nonnull date;
/// Number of retry that were made to send the hit
@property (nonatomic, strong) NSNumber * _Nonnull retry;
- (nonnull instancetype)initWithEntity:(NSEntityDescription * _Nonnull)entity insertIntoManagedObjectContext:(NSManagedObjectContext * _Nullable)context OBJC_DESIGNATED_INITIALIZER;
@end


/// Contextual information from user device
SWIFT_CLASS("_TtC16TrackerExtension16TechnicalContext")
@interface TechnicalContext : NSObject
/// Device OS (name + version)
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull operatingSystem;)
+ (NSString * _Nonnull)operatingSystem SWIFT_WARN_UNUSED_RESULT;
/// Carrier
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull carrier;)
+ (NSString * _Nonnull)carrier SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end


/// Toolbox: utility methods
SWIFT_CLASS("_TtC16TrackerExtension4Tool")
@interface Tool : NSObject
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end


/// Wrapper class for tracking usage of your application
SWIFT_CLASS("_TtC16TrackerExtension7Tracker")
@interface Tracker : NSObject
@property (nonatomic, weak) id <TrackerDelegate> _Nullable _delegate;
/// Tracker current delegate
@property (nonatomic, strong) id <TrackerDelegate> _Nullable delegate;
/// Contains tracker configuration
@property (nonatomic, strong) Configuration * _Nonnull configuration;
/// Contains parameters
@property (nonatomic, strong) Buffer * _Nonnull buffer;
/// Dispatcher
@property (nonatomic, strong) Dispatcher * _Nonnull dispatcher;
@property (nonatomic, copy) NSDictionary<NSString *, BusinessObject *> * _Nonnull businessObjects;
/// Return Offline instance
@property (nonatomic, readonly, strong) Offline * _Nonnull offline;
/// Return Context instance
@property (nonatomic, readonly, strong) Context * _Nonnull context;
/// Return NuggAd instance
@property (nonatomic, readonly, strong) NuggAds * _Nonnull nuggAds;
/// Return GPS tracking instance
/// <ul>
///   <li>
///     Deprecated : location is now only available as a screen object property.
///   </li>
/// </ul>
@property (nonatomic, readonly, strong) Locations * _Nonnull locations;
/// Return Publisher instance
@property (nonatomic, readonly, strong) Publishers * _Nonnull publishers;
/// Return SelfPromotions instance
@property (nonatomic, readonly, strong) SelfPromotions * _Nonnull selfPromotions;
/// Return Identified visitor instance
@property (nonatomic, readonly, strong) IdentifiedVisitor * _Nonnull identifiedVisitor;
/// Get Screens instances
@property (nonatomic, readonly, strong) Screens * _Nonnull screens;
/// Dynamic Screen tracking
@property (nonatomic, readonly, strong) DynamicScreens * _Nonnull dynamicScreens;
/// Return gestures instance
@property (nonatomic, readonly, strong) Gestures * _Nonnull gestures;
/// Return CustomObjects instance
@property (nonatomic, readonly, strong) CustomObjects * _Nonnull customObjects;
/// Return Event instance
@property (nonatomic, readonly, strong) Event * _Nonnull event;
/// Return CustomVar instance
/// <ul>
///   <li>
///     Deprecated : customVars is now only available as a screen object property.
///   </li>
/// </ul>
@property (nonatomic, readonly, strong) CustomVars * _Nonnull customVars;
/// Return Order instance
@property (nonatomic, readonly, strong) Orders * _Nonnull orders;
/// Return Cart instance
@property (nonatomic, readonly, strong) Cart * _Nonnull cart;
/// Return Products instance
@property (nonatomic, readonly, strong) Products * _Nonnull products;
/// Campaign Tracking. Campaign is now available as a screen object property but you may use this method for notification tracking
@property (nonatomic, readonly, strong) Campaigns * _Nonnull campaigns;
/// Return InternalSearch instance
/// <ul>
///   <li>
///     Deprecated : internalSearch is now only available as a screen object property.
///   </li>
/// </ul>
@property (nonatomic, readonly, strong) InternalSearches * _Nonnull internalSearches;
/// Return CustomTreeStructures instance
/// <ul>
///   <li>
///     Deprecated : customTreeStructures is now only available as a screen object property.
///   </li>
/// </ul>
@property (nonatomic, readonly, strong) CustomTreeStructures * _Nonnull customTreeStructures;
/// Return MediaPlayers instance
@property (nonatomic, readonly, strong) MediaPlayers * _Nonnull mediaPlayers;
/// Initialisation with default configuration
- (nonnull instancetype)init;
/// Initialisation with a custom configuration
/// \param configuration map that contains key/values. See TrackerConfigurationKeys
///
- (nonnull instancetype)initWithConfiguration:(NSDictionary<NSString *, NSString *> * _Nonnull)configuration OBJC_DESIGNATED_INITIALIZER;
/// Called when application goes to background
/// should save the timestamp to know if we have to start a new session on the next launch
- (void)applicationDidEnterBackground;
/// Called when app is active
/// Should create a new SessionId if necessary
- (void)applicationActive;
/// Get the current configuration (read-only)
@property (nonatomic, readonly, copy) NSDictionary<NSString *, NSString *> * _Nonnull config;
/// Set a new configuration
/// \param configuration A dictionary that contains new key/values. see TrackerConfigurationKeys.
///
/// \param override if true: the old configuration is full cleared - all default keys <em>MUST</em> be set (optional, default: false)
///
/// \param sync perform the operation synchronously (optional, default: false)
///
/// \param completionHandler called when the operation has been done
///
- (void)setConfig:(NSDictionary<NSString *, NSString *> * _Nonnull)configuration override:(BOOL)override sync:(BOOL)sync completionHandler:(void (^ _Nullable)(BOOL))completionHandler;
/// Set one new key/value pair
/// \param key see TrackerConfigurationKeys
///
/// \param value /
///
/// \param sync perform the operation synchronously (optional, default: false)
///
/// \param completionHandler called when the operation has been done
///
- (void)setConfig:(NSString * _Nonnull)key value:(NSString * _Nonnull)value sync:(BOOL)sync completionHandler:(void (^ _Nullable)(BOOL))completionHandler;
/// Set a new log
/// \param log ATInternet subdomain value
///
/// \param sync perform the operation synchronously (optional, default: false)
///
/// \param completionHandler called when the operation has been done
///
- (void)setLog:(NSString * _Nonnull)log sync:(BOOL)sync completionHandler:(void (^ _Nullable)(BOOL))completionHandler;
/// Set a new secure log
/// \param securedLog ATInternet secured subdomain value
///
/// \param sync perform the operation synchronously (optional, default: false)
///
/// \param completionHandler called when the operation has been done
///
- (void)setSecuredLog:(NSString * _Nonnull)securedLog sync:(BOOL)sync completionHandler:(void (^ _Nullable)(BOOL))completionHandler;
/// Set a new domain
/// \param domain ATInternet collect domain value
///
/// \param sync perform the operation synchronously (optional, default: false)
///
/// \param completionHandler called when the operation has been done
///
- (void)setDomain:(NSString * _Nonnull)domain sync:(BOOL)sync completionHandler:(void (^ _Nullable)(BOOL))completionHandler;
/// Set a new site ID
/// \param siteId ATInternet site identifier
///
/// \param sync perform the operation synchronously (optional, default: false)
///
/// \param completionHandler called when the operation has been done
///
- (void)setSiteId:(NSInteger)siteId sync:(BOOL)sync completionHandler:(void (^ _Nullable)(BOOL))completionHandler;
/// Enable the secure mode (use HTTPS with secured log)
/// \param enabled /
///
/// \param sync perform the operation synchronously (optional, default: false)
///
/// \param completionHandler called when the operation has been done
///
- (void)setSecureModeEnabled:(BOOL)enabled sync:(BOOL)sync completionHandler:(void (^ _Nullable)(BOOL))completionHandler;
/// Enable hash user id (SHA-256 with salt to ensure anonymity)
/// \param enabled /
///
/// \param sync perform the operation synchronously (optional, default: false)
///
/// \param completionHandler called when the operation has been done
///
- (void)setHashUserIdEnabled:(BOOL)enabled sync:(BOOL)sync completionHandler:(void (^ _Nullable)(BOOL))completionHandler;
/// Enable background task
/// \param enabled /
///
/// \param sync perform the operation synchronously (optional, default: false)
///
/// \param completionHandler called when the operation has been done
///
- (void)setBackgroundTaskEnabled:(BOOL)enabled sync:(BOOL)sync completionHandler:(void (^ _Nullable)(BOOL))completionHandler;
/// Set new pixel path
/// \param pixelPath request path to get pixel
///
/// \param sync perform the operation synchronously (optional, default: false)
///
/// \param completionHandler called when the operation has been done
///
- (void)setPixelPath:(NSString * _Nonnull)pixelPath sync:(BOOL)sync completionHandler:(void (^ _Nullable)(BOOL))completionHandler;
/// Enable persistent identified visitor (identification data available for all sessions)
/// \param enabled /
///
/// \param sync perform the operation synchronously (optional, default: false)
///
/// \param completionHandler called when the operation has been done
///
- (void)setPersistentIdentifiedVisitorEnabled:(BOOL)enabled sync:(BOOL)sync completionHandler:(void (^ _Nullable)(BOOL))completionHandler;
/// Enable the campaign persistance
/// \param enabled store last or first campaign
///
/// \param sync perform the operation synchronously (optional, default: false)
///
/// \param completionHandler called when the operation has been done
///
- (void)setCampaignLastPersistenceEnabled:(BOOL)enabled sync:(BOOL)sync completionHandler:(void (^ _Nullable)(BOOL))completionHandler;
/// Set a new campaign lifetime
/// \param lifetime campaign lifetime
///
/// \param sync perform the operation synchronously (optional, default: false)
///
/// \param completionHandler called when the operation has been done
///
- (void)setCampaignLifetime:(NSInteger)lifetime sync:(BOOL)sync completionHandler:(void (^ _Nullable)(BOOL))completionHandler;
/// Set a new Session duration
/// \param duration Duration between two application openings after which a new session is started
///
/// \param sync perform the operation synchronously (optional, default: false)
///
/// \param completionHandler called when the operation has been done
///
- (void)setSessionBackgroundDuration:(NSInteger)duration sync:(BOOL)sync completionHandler:(void (^ _Nullable)(BOOL))completionHandler;
/// Add a parameter in the hit querystring
/// \param key parameter key
///
/// \param value string parameter value
///
///
/// returns:
/// the current tracker
- (Tracker * _Nonnull)setParam:(NSString * _Nonnull)key value:(NSString * _Nonnull (^ _Nonnull)(void))value;
/// Add a parameter in the hit querystring
/// \param key parameter key
///
/// \param value string parameter value
///
/// \param options parameter options
///
///
/// returns:
/// the current tracker
- (Tracker * _Nonnull)setParam:(NSString * _Nonnull)key value:(NSString * _Nonnull (^ _Nonnull)(void))value options:(ParamOption * _Nonnull)options;
/// Add a parameter in the hit querystring
/// \param key parameter key
///
/// \param value string parameter value
///
///
/// returns:
/// the current tracker
- (Tracker * _Nonnull)setStringParam:(NSString * _Nonnull)key value:(NSString * _Nonnull)value;
/// Add a parameter in the hit querystring
/// \param key parameter key
///
/// \param value string parameter value
///
/// \param options parameter options
///
///
/// returns:
/// the current tracker
- (Tracker * _Nonnull)setStringParam:(NSString * _Nonnull)key value:(NSString * _Nonnull)value options:(ParamOption * _Nonnull)options;
/// Add a parameter in the hit querystring
/// \param key parameter key
///
/// \param value int parameter value
///
///
/// returns:
/// the current tracker
- (Tracker * _Nonnull)setIntParam:(NSString * _Nonnull)key value:(NSInteger)value;
/// Add a parameter in the hit querystring
/// \param key parameter key
///
/// \param value int parameter value
///
/// \param options parameter options
///
///
/// returns:
/// the current tracker
- (Tracker * _Nonnull)setIntParam:(NSString * _Nonnull)key value:(NSInteger)value options:(ParamOption * _Nonnull)options;
/// Add a parameter in the hit querystring
/// \param key parameter key
///
/// \param value float parameter value
///
///
/// returns:
/// the current tracker
- (Tracker * _Nonnull)setFloatParam:(NSString * _Nonnull)key value:(float)value;
/// Add a parameter in the hit querystring
/// \param key parameter key
///
/// \param value float parameter value
///
/// \param options parameter options
///
///
/// returns:
/// the current tracker
- (Tracker * _Nonnull)setFloatParam:(NSString * _Nonnull)key value:(float)value options:(ParamOption * _Nonnull)options;
/// Add a parameter in the hit querystring
/// \param key parameter key
///
/// \param value double parameter value
///
///
/// returns:
/// the current tracker
- (Tracker * _Nonnull)setDoubleParam:(NSString * _Nonnull)key value:(double)value;
/// Add a parameter in the hit querystring
/// \param key parameter key
///
/// \param value double parameter value
///
/// \param options parameter options
///
///
/// returns:
/// the current tracker
- (Tracker * _Nonnull)setDoubleParam:(NSString * _Nonnull)key value:(double)value options:(ParamOption * _Nonnull)options;
/// Add a parameter in the hit querystring
/// \param key parameter key
///
/// \param value bool parameter value
///
///
/// returns:
/// the current tracker
- (Tracker * _Nonnull)setBoolParam:(NSString * _Nonnull)key value:(BOOL)value;
/// Add a parameter in the hit querystring
/// \param key parameter key
///
/// \param value bool parameter value
///
/// \param options parameter options
///
///
/// returns:
/// the current tracker
- (Tracker * _Nonnull)setBoolParam:(NSString * _Nonnull)key value:(BOOL)value options:(ParamOption * _Nonnull)options;
/// Add a parameter in the hit querystring
/// \param key parameter key
///
/// \param value array parameter value
///
///
/// returns:
/// the current tracker
- (Tracker * _Nonnull)setArrayParam:(NSString * _Nonnull)key value:(NSArray * _Nonnull)value;
/// Add a parameter in the hit querystring
/// \param key parameter key
///
/// \param value array parameter value
///
/// \param options parameter options
///
///
/// returns:
/// the current tracker
- (Tracker * _Nonnull)setArrayParam:(NSString * _Nonnull)key value:(NSArray * _Nonnull)value options:(ParamOption * _Nonnull)options;
/// Add a parameter in the hit querystring
/// \param key parameter key
///
/// \param value dictionary parameter value
///
///
/// returns:
/// the current tracker
- (Tracker * _Nonnull)setDictionaryParam:(NSString * _Nonnull)key value:(NSDictionary<NSString *, id> * _Nonnull)value;
/// Add a parameter in the hit querystring
/// \param key parameter key
///
/// \param value dictionary parameter value
///
/// \param options parameter options
///
///
/// returns:
/// the current tracker
- (Tracker * _Nonnull)setDictionaryParam:(NSString * _Nonnull)key value:(NSDictionary<NSString *, id> * _Nonnull)value options:(ParamOption * _Nonnull)options;
/// Set a not string type parameter
/// \param key parameter key
///
/// \param value parameter value
///
/// \param type parameter type
///
/// \param options parameter options
///
- (void)handleNotStringParameterSetting:(NSString * _Nonnull)key value:(id _Nonnull)value options:(ParamOption * _Nullable)options;
/// Remove a parameter from the hit querystring
/// \param param type
///
- (void)unsetParam:(NSString * _Nonnull)param;
/// Remove the screen context: Use only for specific issue mark screenA, mark touchA, dont mark screenB, mark touchB. touchB will be no longer attached to screenA
- (void)resetScreenContext;
/// Sends all tracking objects added
- (void)dispatch;
/// Get the user id
///
/// returns:
/// the user id depending on configuration (uuid, idfv)
- (NSString * _Nonnull)getUserId SWIFT_WARN_UNUSED_RESULT;
/// Set a custom user id
/// \param userId the userID. if hashUserId is enabled, the hash will be performed on this userID
///
- (void)setUserIdWithUserId:(NSString * _Nonnull)userId;
/// Disable user identification.
SWIFT_CLASS_PROPERTY(@property (nonatomic, class) BOOL doNotTrack;)
+ (BOOL)doNotTrack SWIFT_WARN_UNUSED_RESULT;
+ (void)setDoNotTrack:(BOOL)newValue;
/// Set tracker crash handler
/// Use only if you don’t already use another crash analytics solution
/// Once enabled, tracker crash handler can’t be disabled until tracker instance termination
SWIFT_CLASS_PROPERTY(@property (nonatomic, class) BOOL handleCrash;)
+ (BOOL)handleCrash SWIFT_WARN_UNUSED_RESULT;
+ (void)setHandleCrash:(BOOL)newValue;
@end


/// Tracker configuration keys helper - used to make easier Tracker creation by providing few static parameters
SWIFT_CLASS("_TtC16TrackerExtension24TrackerConfigurationKeys")
@interface TrackerConfigurationKeys : NSObject
/// sessionBackgroundDuration
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull SessionBackgroundDuration;)
+ (NSString * _Nonnull)SessionBackgroundDuration SWIFT_WARN_UNUSED_RESULT;
/// campaignLifetime
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull CampaignLifetime;)
+ (NSString * _Nonnull)CampaignLifetime SWIFT_WARN_UNUSED_RESULT;
/// campaignLastPersistence
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull CampaignLastPersistence;)
+ (NSString * _Nonnull)CampaignLastPersistence SWIFT_WARN_UNUSED_RESULT;
/// persistIdentifiedVisitor
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull PersistIdentifiedVisitor;)
+ (NSString * _Nonnull)PersistIdentifiedVisitor SWIFT_WARN_UNUSED_RESULT;
/// hashUserId
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull HashUserId;)
+ (NSString * _Nonnull)HashUserId SWIFT_WARN_UNUSED_RESULT;
/// enableBackgroundTask
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull EnableBackgroundTask;)
+ (NSString * _Nonnull)EnableBackgroundTask SWIFT_WARN_UNUSED_RESULT;
/// storage
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull OfflineMode;)
+ (NSString * _Nonnull)OfflineMode SWIFT_WARN_UNUSED_RESULT;
/// log
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull Log;)
+ (NSString * _Nonnull)Log SWIFT_WARN_UNUSED_RESULT;
/// logSSL
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull LogSSL;)
+ (NSString * _Nonnull)LogSSL SWIFT_WARN_UNUSED_RESULT;
/// domain
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull Domain;)
+ (NSString * _Nonnull)Domain SWIFT_WARN_UNUSED_RESULT;
/// pixelPath
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull PixelPath;)
+ (NSString * _Nonnull)PixelPath SWIFT_WARN_UNUSED_RESULT;
/// site
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull Site;)
+ (NSString * _Nonnull)Site SWIFT_WARN_UNUSED_RESULT;
/// secure
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull Secure;)
+ (NSString * _Nonnull)Secure SWIFT_WARN_UNUSED_RESULT;
/// identifier
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull Identifier;)
+ (NSString * _Nonnull)Identifier SWIFT_WARN_UNUSED_RESULT;
/// downloadSource
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull DownloadSource;)
+ (NSString * _Nonnull)DownloadSource SWIFT_WARN_UNUSED_RESULT;
/// plugins
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull Plugins;)
+ (NSString * _Nonnull)Plugins SWIFT_WARN_UNUSED_RESULT;
/// enableAutoTracking
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull AutoTracking;)
+ (NSString * _Nonnull)AutoTracking SWIFT_WARN_UNUSED_RESULT;
/// autoTrackerToken
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull AutoTrackerToken;)
+ (NSString * _Nonnull)AutoTrackerToken SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end


@class NSOperationQueue;

/// Operation queue
SWIFT_CLASS("_TtC16TrackerExtension12TrackerQueue")
@interface TrackerQueue : NSObject
/// Private initializer (cannot instantiate BuilderQueue)
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
/// TrackerQueue singleton
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong) TrackerQueue * _Nonnull sharedInstance;)
+ (TrackerQueue * _Nonnull)sharedInstance SWIFT_WARN_UNUSED_RESULT;
/// Queue
@property (nonatomic, strong) NSOperationQueue * _Nonnull queue;
@end




/// Wrapper class for Video tracking
SWIFT_CLASS("_TtC16TrackerExtension5Video")
@interface Video : RichMedia
/// Media type
@property (nonatomic, readonly, copy) NSString * _Nonnull type;
/// Duration
@property (nonatomic) NSInteger duration;
@end


/// Wrapper class to manage Video instances
SWIFT_CLASS("_TtC16TrackerExtension6Videos")
@interface Videos : NSObject
@property (nonatomic, copy) NSDictionary<NSString *, Video *> * _Nonnull list;
/// MediaPlayer instance
@property (nonatomic, strong) MediaPlayer * _Nonnull player;
/// Videos initializer
/// \param player the player instance
///
///
/// returns:
/// Videos instance
- (nonnull instancetype)initWithPlayer:(MediaPlayer * _Nonnull)player OBJC_DESIGNATED_INITIALIZER;
/// Add a new video
/// \param name video name
///
/// \param duration video duration in seconds
///
///
/// returns:
/// the new video instance
- (Video * _Nonnull)add:(NSString * _Nonnull)name duration:(NSInteger)duration SWIFT_WARN_UNUSED_RESULT;
/// Add a new video
/// \param name video name
///
/// \param chapter1 chapter1 label
///
/// \param duration video duration in seconds
///
///
/// returns:
/// the new video instance
- (Video * _Nonnull)add:(NSString * _Nonnull)name chapter1:(NSString * _Nonnull)chapter1 duration:(NSInteger)duration SWIFT_WARN_UNUSED_RESULT;
/// Add a new video
/// \param name video name
///
/// \param chapter1 chapter1 label
///
/// \param chapter2 chapter2 label
///
/// \param duration video duration in seconds
///
///
/// returns:
/// the new video instance
- (Video * _Nonnull)add:(NSString * _Nonnull)name chapter1:(NSString * _Nonnull)chapter1 chapter2:(NSString * _Nonnull)chapter2 duration:(NSInteger)duration SWIFT_WARN_UNUSED_RESULT;
/// Add a new video
/// \param name video name
///
/// \param chapter1 chapter1 label
///
/// \param chapter2 chapter2 label
///
/// \param chapter3 chapter3 label
///
/// \param duration video duration in seconds
///
///
/// returns:
/// the new video instance
- (Video * _Nonnull)add:(NSString * _Nonnull)name chapter1:(NSString * _Nonnull)chapter1 chapter2:(NSString * _Nonnull)chapter2 chapter3:(NSString * _Nonnull)chapter3 duration:(NSInteger)duration SWIFT_WARN_UNUSED_RESULT;
/// Remove a video
/// \param name video name
///
- (void)remove:(NSString * _Nonnull)name;
/// Remove all videos
- (void)removeAll;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
@end

SWIFT_MODULE_NAMESPACE_POP
#pragma clang diagnostic pop
