//
//  USDKCommonTypes.h
//  Unity-iPhone
//
//  Created by Vineet Srivastava on 11/22/16.
//
//

typedef enum {
    ASIMAdPositionCustom = -1,
    ASIMAdPositionTopCenter = 0,
    ASIMAdPositionBottomCenter,
    ASIMAdPositionTopLeft,
    ASIMAdPositionTopRight,
    ASIMAdPositionBottomLeft,
    ASIMAdPositionBottomRight,
    ASIMAdPositionCenter
} ASIMAdPosition;

/// Base type representing a InMobi* pointer.
typedef const void *InMobiRef;

/// Type representing a Unity banner client.
typedef const void *InMobiBannerClientRef;

/// Type representing a Unity Interstitial client.
typedef const void *InMobiInterstitialClientRef;

/// Type representing a InMobiBanner.
typedef const void *InMobiBannerRef;

/// Type representing a InMobiInterstitial.
typedef const void *InMobiInterstitialRef;

/// Callback for when a banner ad request was successfully loaded.
typedef void (*InMobiBannerOnAdLoadSucceeded)(InMobiBannerClientRef *bannerClient);

/// Callback for when a banner ad request failed.
typedef void (*InMobiBannerOnAdLoadFailed)(InMobiBannerClientRef *bannerClient,const char *error);

///Callback for when a banner ad is interacted
typedef void (*InMobiBannerOnAdInteraction)(InMobiBannerClientRef *bannerClient, const char *message);

/// Callback for when a banner ad is dismissed
typedef void (*InMobiBannerOnAdDismissed)(InMobiBannerClientRef *bannerClient);

/// Callback for when a full screen view is presented as a result of a banner click.
typedef void (*InMobiBannerOnAdDisplayed)(InMobiBannerClientRef *bannerClient);

/// Callback for when an application will background or terminate as a result of a banner click.
typedef void (*InMobiBannerOnUserLeftApplication)(InMobiBannerClientRef *bannerClient);

///Callback for when user is rewarded
typedef void (*InMobiBannerOnAdRewardActionCompleted)(InMobiBannerClientRef *bannerClient, const char *rewards);


/// Callback for when a interstitial ad request was successfully received.
typedef void (*InMobiInterstitialOnAdReceived)(InMobiInterstitialClientRef *interstitialClient);

/// Callback for when a interstitial ad request was successfully loaded.
typedef void (*InMobiInterstitialOnAdLoadSucceeded)(InMobiInterstitialClientRef *interstitialClient);

/// Callback for when a interstitial ad request failed.
typedef void (*InMobiInterstitialOnAdLoadFailed)(InMobiInterstitialClientRef *interstitialClient,const char *error);

///Callback for when a interstitial ad is interacted
typedef void (*InMobiInterstitialOnAdInteraction)(InMobiInterstitialClientRef *interstitialClient, const char *message);

/// Callback for when a banner ad is dismissed
typedef void (*InMobiInterstitialOnAdDismissed)(InMobiInterstitialClientRef *interstitialClient);

/// Callback for when a interstitial is displayed
typedef void (*InMobiInterstitialOnAdDisplayed)(InMobiInterstitialClientRef *interstitialClient);

/// Callback for when a interstitial is display failed
typedef void (*InMobiInterstitialOnAdDisplayFailed)(InMobiInterstitialClientRef *interstitialClient);

/// Callback for when a interstitial will Display
typedef void (*InMobiInterstitialWillDisplay)(InMobiInterstitialClientRef *interstitialClient);

/// Callback for when an application will background or terminate as a result of a interstitial click.
typedef void (*InMobiInterstitialOnUserLeftApplication)(InMobiInterstitialClientRef *interstitialClient);

///Callback for when user is rewarded
typedef void (*InMobiInterstitialOnAdRewardActionCompleted)(InMobiInterstitialClientRef *interstitialClient, const char *rewards);


///////////////////////////////////////////////////////////////////////AS?//////////////////////////////////////


typedef const void *ASRef;

#pragma mark :- ASBanner

/// Type representing a Unity banner client.
typedef const void *ASBannerClientRef;

/// Type representing a ASBanner.
typedef const void *ASBannerRef;

/// Callback for when a banner ad request was successfully loaded.
typedef void (*ASBannerOnAdLoadSucceeded)(ASBannerClientRef *bannerClient);

/// Callback for when a banner ad request failed.
typedef void (*ASBannerOnAdLoadFailed)(ASBannerClientRef *bannerClient,const char *error);

///Callback for when a banner ad is interacted
typedef void (*ASBannerOnAdClicked)(ASBannerClientRef *bannerClient);

/// Callback for when a banner ad is dismissed
typedef void (*ASBannerOnAdCollapsed)(ASBannerClientRef *bannerClient);

/// Callback for when a full screen view is presented as a result of a banner click.
typedef void (*ASBannerOnAdExpanded)(ASBannerClientRef *bannerClient);

/// Callback for when an application will background or terminate as a result of a banner click.
typedef void (*ASBannerOnUserLeftApplication)(ASBannerClientRef *bannerClient);

///Callback for when Ad rendered
typedef void (*ASBannerOnAdImpression)(ASBannerClientRef *bannerClient);

// Callback for load with transaction
typedef void (*ASBannerOnAdLoadWithTransaction)(ASBannerClientRef *bannerClient,const char *transactionData);

// Callback for show with transaction
typedef void (*ASBannerOnAdShowWithTransaction)(ASBannerClientRef *bannerClient,const char *transactionData);



#pragma mark :- ASInterstitial
/// Type representing a Unity Interstitial client.
typedef const void *ASInterstitialClientRef;

/// Type representing a ASInterstitial.
typedef const void *ASInterstitialRef;

// Callback for when a interstitial ad request was successfully loaded.
typedef void (*ASInterstitialOnAdLoadSucceeded)(ASInterstitialClientRef *interstitialClient);

/// Callback for when a interstitial ad request failed.
typedef void (*ASInterstitialOnAdLoadFailed)(ASInterstitialClientRef *interstitialClient,const char *error);

///Callback for when a interstitial ad is interacted
typedef void (*ASInterstitialOnAdImpression)(ASInterstitialClientRef *interstitialClient);

// Callback for load with transaction
typedef void (*ASInterstitialOnAdLoadWithTransaction)(ASInterstitialClientRef *interstitialClient,const char *transactionData);

// Callback for show with transaction
typedef void (*ASInterstitialAdOnShowWithTransaction)(ASInterstitialClientRef *interstitialClient,const char *transactionData);

/// Callback for when a banner ad is dismissed
typedef void (*ASInterstitialOnAdDismissed)(ASInterstitialClientRef *interstitialClient);

///Callback for when a interstitial ad is interacted
typedef void (*ASInterstitialOnAdClicked)(ASInterstitialClientRef *interstitialClient);

/// Callback for when an application will background or terminate as a result of a interstitial click.
typedef void (*ASInterstitialOnUserLeftApplication)(ASInterstitialClientRef *interstitialClient);

///Callback for when user is rewarded
typedef void (*ASInterstitialOnDidVirtualCurrencyLoad)(ASInterstitialClientRef *interstitialClient, const char *rewards);

///Callback for when user is rewarded
typedef void (*ASInterstitialOnDidVirtualCurrencyReward)(ASInterstitialClientRef *interstitialClient, const char *rewards);


///////////////////////////////////////////////////////////////////////AS?//////////////////////////////////////

#pragma mark :- UnifiedId


/// Type representing a Unity UnifiedId client.
typedef const void *InMobiUnifiedIdClientRef;

/// Type representing a InMobiUnifiedIdService.
typedef const void *InMobiUnifiedIdServiceRef;

///Callback for when unifiedId fetch is complete
typedef void (*InMobiOnFetchCompleted)(InMobiUnifiedIdClientRef *unifiedIdClient, const char *response, const char *error);