//
//  ALSdk.h
//  AppLovinSDK
//
//  Created by Basil Shikin on 2/1/12.
//  Copyright © 2020 AppLovin Corporation. All rights reserved.
//
@class ALAdService;
@class ALCMPService;
@class ALEventService;
@class ALSdkConfiguration;
@class ALSdkInitializationConfiguration;
@class ALSdkSettings;
@class ALTargetingData;
@class ALUserSegment;
@class MAMediatedNetworkInfo;
NS_ASSUME_NONNULL_BEGIN
/**
 * This is a base class for the AppLovin iOS SDK.
 */
@interface ALSdk : NSObject
#pragma mark - High Level SDK Properties
/**
 * The current version of the SDK. The value is in the format of "Major.Minor.Revision".
 */
@property (class, nonatomic, copy, readonly) NSString *version;
/**
 * The current version of the SDK in numeric format.
 */
@property (class, nonatomic, assign, readonly) NSUInteger versionCode;
/**
 * This SDK’s SDK key.
 */
@property (nonatomic, copy, readonly) NSString *sdkKey;
/**
 * This SDK’s SDK settings.
 */
@property (nonatomic, strong, readonly) ALSdkSettings *settings;
/**
 * The SDK configuration object that the SDK creates when you initialize the SDK.
 */
@property (nonatomic, strong, readonly) ALSdkConfiguration *configuration;
/**
 * @deprecated This property has been moved to @c ALSdkSettings and will be removed in a future SDK version.
 */
@property (nonatomic, copy, nullable) NSString *userIdentifier __deprecated_msg("This property has been moved to @c ALSdkSettings and will be removed in a future SDK version.");
/**
 * A user segment allows AppLovin to serve ads by using custom-defined rules that are based on which segment the user is in. The user segment is a custom string of 32 alphanumeric characters or less.
 */
@property (nonatomic, strong, readonly, nullable) ALUserSegment *userSegment;
/**
 * A class which allows you to send any demographic or interest-based targeting data.
 */
@property (nonatomic, strong, readonly, nullable) ALTargetingData *targetingData;
#pragma mark - SDK Services
/**
 * The ad service, which loads and displays ads from AppLovin servers.
 */
@property (nonatomic, strong, readonly) ALAdService *adService;
/**
 * The AppLovin event service, which tracks post-install user events.
 *
 * @return Event service. Guaranteed not to be @c NULL.
 */
@property (nonatomic, strong, readonly) ALEventService *eventService;
/**
 * The CMP service, which provides direct APIs for interfacing with the Google-certified CMP installed, if any.
 *
 * @return CMP service. Guaranteed not to be @c NULL.
 */
@property (nonatomic, strong, readonly) ALCMPService *cmpService;
#pragma mark - MAX
/**
 * The mediation provider. Set this either by using one of the provided strings in ALMediationProvider.h, or your own string if you do not find an applicable one there.
 *
 * @deprecated This property has been moved to @c ALSdkInitializationConfiguration and will be removed in a future SDK version.
 */
@property (nonatomic, copy, nullable) NSString *mediationProvider __deprecated_msg("This setter has been moved to @c ALSdkInitializationConfiguration and will be removed in a future SDK version.");
/**
 * The list of available mediation networks, as an array of @c MAMediatedNetworkInfo objects.
 */
@property (nonatomic, strong, readonly) NSArray *availableMediatedNetworks;
/**
 * Present the mediation debugger UI.
 * This debugger tool provides the status of your integration for each third-party ad network.
 *
 * @see MAX Integration Guide ⇒ iOS ⇒ Testing Networks ⇒ Mediation Debugger
 */
- (void)showMediationDebugger;
/**
 * Present the mediation debugger UI.
 * This debugger tool provides the status of your integration for each third-party ad network.
 *
 * @see MAX Integration Guide ⇒ iOS ⇒ Testing Networks ⇒ Mediation Debugger
 *
 * @param amazonAdSizes A map of the MAX Ad Unit ID to Amazon Publisher Services' @c DTBAdSize.
 */
- (void)showMediationDebuggerWithAmazonAdSize:(nullable NSDictionary *)amazonAdSizes;
/**
 * Present the Creative Debugger UI.
 * This debugger tool provides information for recently displayed ads.
 */
- (void)showCreativeDebugger;
#pragma mark - SDK Initialization
/**
 * The sort of callback that the SDK calls when it finishes initializing.
 */
typedef void (^ALSdkInitializationCompletionHandler)(ALSdkConfiguration *configuration);
/**
 * Whether the SDK has fully been initialized without errors and the completion callback called.
 */
@property (nonatomic, assign, readonly, getter=isInitialized) BOOL initialized;
/**
 * Gets a shared instance of AppLovin SDK.
 *
 * @return The shared instance of AppLovin’s SDK, or @c nil (indicating an error) if the SDK key is not set in the application’s @code Info.plist @endcode.
 */
+ (ALSdk *)shared;
/**
 * Initializes the SDK with the given initialization configuration and completion block.
 *
 * The SDK invokes the callback on the main thread.
 *
 * @param initializationConfiguration  The configuration to initialize the SDK with.
 * @param completionHandler                        The callback that the SDK will call when the SDK finishes initializing.
 *
 * @see MAX Integration Guide ⇒ iOS ⇒ Integration ⇒ Initialize the SDK
 */
- (void)initializeWithConfiguration:(ALSdkInitializationConfiguration *)initializationConfiguration completionHandler:(nullable ALSdkInitializationCompletionHandler)completionHandler;
- (instancetype)init __attribute__((unavailable("Use +[ALSdk shared].")));
+ (instancetype)new NS_UNAVAILABLE;
@end
@interface ALSdk (Deprecated)
- (void)setPluginVersion:(NSString *)pluginVersion __deprecated_msg("This method is deprecated and will be removed in a future SDK version. (see ALSdkInitializationConfiguration.pluginVersion)");
/**
 * Initializes the SDK.
 */
- (void)initializeSdk __deprecated_msg("This method is deprecated and will be removed in a future SDK version. Please use `-[[ALSdk shared] initializeWithConfiguration:completionHandler:]` instead.");
/**
 * Initializes the SDK with a given completion block.
 *
 * The SDK invokes the callback on the main thread.
 *
 * @param completionHandler The callback that the SDK will call when the SDK finishes initializing.
 *
 * @see MAX Integration Guide ⇒ iOS ⇒ Integration ⇒ Initialize the SDK
 */
- (void)initializeSdkWithCompletionHandler:(nullable ALSdkInitializationCompletionHandler)completionHandler __deprecated_msg("This method is deprecated and will be removed in a future SDK version. Please use `-[[ALSdk shared] initializeWithConfiguration:completionHandler:]` instead.");
/**
 * Initializes the default instance of AppLovin SDK.
 *
 * @warning Make sure your SDK key is set in the application’s @code Info.plist @endcode under the property @c AppLovinSdkKey.
 *
 * @see MAX Integration Guide ⇒ iOS ⇒ Integration ⇒ Initialize the SDK
 */
+ (void)initializeSdk __deprecated_msg("This method is deprecated and will be removed in a future SDK version. Please use `-[[ALSdk shared] initializeWithConfiguration:completionHandler:]` instead.");
/**
 * Initializes the default instance of AppLovin SDK.
 *
 * @warning Make sure your SDK key is set in the application’s @code Info.plist @endcode under the property @c AppLovinSdkKey.
 *
 * @param completionHandler The callback that the SDK will run on the main queue when the SDK finishes initializing.
 *
 * @see MAX Integration Guide ⇒ iOS ⇒ Integration ⇒ Initialize the SDK
 */
+ (void)initializeSdkWithCompletionHandler:(nullable ALSdkInitializationCompletionHandler)completionHandler __deprecated_msg("This method is deprecated and will be removed in a future SDK version. Please use `-[[ALSdk shared] initializeWithConfiguration:completionHandler:]` instead.");
/**
 * Gets a shared instance of AppLovin SDK.
 *
 * @warning Make sure your SDK key is set in the application’s @code Info.plist @endcode under the property @c AppLovinSdkKey.
 *
 * @param settings An SDK settings object.
 *
 * @return The shared instance of AppLovin’s SDK, or @c nil (indicating an error) if the SDK key is not set in the application’s @code Info.plist @endcode.
 */
+ (nullable ALSdk *)sharedWithSettings:(ALSdkSettings *)settings __deprecated_msg("This method is deprecated and will be removed in a future SDK version. Please use `+[ALSdk shared]` and initialize with `-[[ALSdk shared] initializeWithConfiguration:completionHandler:]` as soon as possible");
/**
 * Gets an instance of AppLovin SDK by using an SDK key.
 *
 * @param key SDK key to use for the instance of the AppLovin SDK.
 *
 * @return An instance of AppLovin’s SDK, or @c nil (indicating an error) if @c key is not set.
 */
+ (nullable ALSdk *)sharedWithKey:(NSString *)key __deprecated_msg("This method is deprecated and will be removed in a future SDK version. Please use `+[ALSdk shared]` and initialize with `-[[ALSdk shared] initializeWithConfiguration:completionHandler:]` as soon as possible");
/**
 * Gets an instance of AppLovin SDK by using an SDK key and providing SDK settings.
 *
 * @param key       SDK key to use for the instance of the AppLovin SDK.
 * @param settings  An SDK settings object.
 *
 * @return An instance of AppLovin’s SDK, or @c nil (indicating an error) if @c key is not set.
 */
+ (nullable ALSdk *)sharedWithKey:(NSString *)key settings:(ALSdkSettings *)settings __deprecated_msg("This method is deprecated and will be removed in a future SDK version. Please use `+[ALSdk shared]` and initialize with `-[[ALSdk shared] initializeWithConfiguration:completionHandler:]` as soon as possible");
@end
NS_ASSUME_NONNULL_END