export declare class Pyze{
  // define your typings manually
  // or..
  // use take the ios or android .d.ts files and copy/paste them here
  static initialize(pyzeAppKey:string):void;
  static initializeWithLogLevel(pyzeAppKey:string, logLevel: string):void;
  static getTimerReference():Number;
  static showInAppNotification(callback):void;
  static showInAppNotificatonWithCustomAttributes( messageType: string, navigationBarColor : string, callback):void;
  static closeInAppMessage():void;
  static countNewUnFetchedMessages(callback):void;
  static getMessageHeaderOfType(messageType:string, callback):void;
  static getMessageWithContentID(cId : string, mId : string, callback):void;
}

export declare class PyzeEvents{
  static postCustomEvent(eventName: string):void;
  static postCustomEventWithAttributes(eventName:string, attributes:Object):void;
  static postTimedEventWithName(eventName:string, timerReferece : Number):void;
  static postTimedEventWithNameAndAttributes(eventName: string, timerReferece:Number, customAttributes:Object):void;
}
export declare class PyzeAccount{
  static postLoginOffered(customAttributes:Object):void;
  static postLoginStarted(customAttributes:Object):void;
  static postSocialLoginOffered(type: string, customAttributes:Object):void;
  static postSocialLoginStarted(type: string, customAttributes:Object):void;
  static postSocialLoginCompleted(type: string, customAttributes:Object):void;
  static postRegistrationOffered(customAttributes:Object):void;
  static postRegistrationStarted(customAttributes:Object):void;
  static postRegistrationCompleted(customAttributes:Object):void;
  static postLoginCompleted (success : Boolean, errCodeStr : string, customAttributes:Object):void;
  static postLogoutCompleted(customAttributes:Object):void;
  static postPasswordResetRequest(customAttributes:Object):void;
  static postPasswordResetCompleted(customAttributes:Object):void;
}
export declare class PyzeAd{
  static postAdRequested(adNetwork : string, appScreen : string, size : string, type : string, customAttributes:Object):void;
  static postAdReceived(adNetwork : string, appScreen : string, resultCode : string, success : Boolean, customAttributes:Object):void;
  static postAdClicked(adNetwork : string, appScreen : string, adCode : string, success : Boolean, errorCode : string, customAttributes:Object):void;
}

export declare class PyzeAdvocacy{
  static postRequestFeedback(customAttributes:Object):void;
  static postFeedbackProvided(customAttributes:Object):void;
  static postRequestRating(customAttributes)
}

export declare class PyzeBitcoin{
  static postSentBitCoins(customAttributes:Object):void;
  static postRequestedBitCoins(customAttributes:Object):void;
  static postReceivedBitCoins(customAttributes:Object):void;
  static postViewedTransaction(customAttributes:Object):void;
  static postImportedPrivateKey(customAttributes:Object):void;
  static postScannedPrivateKey(customAttributes:Object):void;
}

export declare class PyzeCommerceBeacon{
  static postEnteredRegion( beaconUUID : string,  beaconMajor : string,  beaconMinor : string, uniqueRegionIdentifier : string, customAttributes:Object):void;
  static postExitedRegion( beaconUUID : string,  beaconMajor : string,  beaconMinor : string, uniqueRegionIdentifier : string, customAttributes:Object):void;
  static postTransactedRegion( beaconUUID : string,  beaconMajor : string,  beaconMinor : string, uniqueRegionIdentifier : string,  proximity: string, actionId : string, customAttributes:Object):void;
}

export declare class PyzeCommerceBilling{
  static postBillingStarted(customAttributes:Object):void;
  static postBillingCompleted(customAttributes:Object):void;
  static postBillingAbandoned(customAttributes:Object):void;
  static postBillingFailed(customAttributes:Object):void;
}

export declare class PyzeCommerceCart{
  static postAddItem( cartId : string,  itemCategory : string,  itemId : string, customAttributes:Object):void;
  static postAddItemFromDeals( cartId : string,  itemCategory : string, itemId : string, uniqueDealId : string, customAttributes:Object):void;
  static postAddItemFromWishList( cartId : string,  itemCategory : string,  itemId : string, uniqueWishListId : string, customAttributes:Object):void;
  static postAddItemFromCuratedList( cartId : string,  itemCategory : string,  itemId : string, uniqueCuratedListID : string, customAttributes:Object):void;
  static postAddItemFromRecommendations( cartId : string,  itemCategory : string,  itemId : string, uniqueRecommendationId : string, customAttributes:Object):void;
  static postAddItemFromPreviousOrders( cartId : string,  itemCategory : string,  itemId : string, previousOrderId : string, customAttributes:Object):void;
  static postAddItemFromSearchResults( cartId : string,  itemCategory : string,  itemId : string, searchstring : string, customAttributes:Object):void;
  static postAddItemFromSubscriptionList( cartId : string,  itemCategory : string,  itemId : string, uniqueSubscriptionId : string, customAttributes:Object):void;
  static postRemoveItemFromCart( cartId : string,  itemCategory : string,  itemId : string, customAttributes:Object):void;
}
export declare class PyzeCommerceCheckout{
  static postCheckoutStarted(customAttributes:Object):void;
  static postCheckoutCompleted (customAttributes:Object):void;
  static postCheckoutAbandoned(customAttributes:Object):void;
  static postCheckoutFailed(customAttributes:Object):void;
}

export declare class PyzeCommerceCuratedList {
  static postCreated( uniqueCuratedListID : string,  curatedListType : string, customAttributes:Object):void;
  static postBrowsed( curatedList : string,  curatedListCreator : string, customAttributes:Object):void;
  static postAddedItem( uniqueCuratedListID : string,  itemCategory : string, itemId : string, customAttributes:Object):void;
  static postRemovedItem( uniqueCuratedListID : string,  curatedListType : string, itemId : string, customAttributes:Object):void;
  static postShared( curatedList : string,  curatedListCreator : string, customAttributes:Object):void;
  static postPublished( curatedList : string,  curatedListCreator : string, customAttributes:Object):void;
}

export declare class PyzeCommerceDiscovery {
  static postSearched( searchstring : string, latency : Number, customAttributes:Object):void;
  static postBrowsedCategory( category : string, customAttributes:Object):void;
  static postBrowsedDeals( uniqueDealId : string, customAttributes:Object):void;
  static postBrowsedRecommendations( uniqueRecommendationID : string, customAttributes:Object):void;
  static postBrowsedPrevOrders( rangeStart : string,  rangeEnd : string, customAttributes:Object):void;
}

export declare class PyzeCommerceItem {
  static postViewedItem(customAttributes:Object):void;
  static postScannedItem(customAttributes:Object):void;
  static postViewedReviews(customAttributes:Object):void;
  static postViewedDetails(customAttributes:Object):void;
  static postViewedPrice(customAttributes:Object):void;
  static postItemShare(customAttributes:Object):void;
  static postItemRateOn5Scale( itemSKU : string,  rating : string, customAttributes:Object):void;
}

export declare class PyzeCommercePayment {
  static postPaymentStarted(customAttributes:Object):void;
  static postPaymentCompleted(customAttributes:Object):void;
  static postPaymentAbandoned(customAttributes:Object):void;
  static postPaymentFailed(customAttributes:Object):void;
}

export declare class PyzeCommerceRevenue {
  static postRevenue(revenue : Number, customAttributes:Object):void;
  static postRevenueDetailed(revenue : Number,  paymentInstrument : string, customAttributes:Object):void;
  static postRevenueUsingApplePay(revenue : Number, customAttributes:Object):void;
  static postRevenueUsingSamsungPay(revenue : Number, customAttributes:Object):void;
  static postRevenueUsingGooglePay(revenue : Number, customAttributes:Object):void;
}

export declare class PyzeCommerceShipping {
  static postShippingStarted(customAttributes:Object):void;
  static postShippingCompleted(customAttributes:Object):void;
  static postShippingAbandoned(customAttributes:Object):void;
  static postShippingFailed(customAttributes:Object):void;
}

export declare class PyzeCommerceSupport {
  static postLiveChatStartedWithTopic( topic : string, orderNumber : string, customAttributes:Object):void;
  static postLiveChatEndedWithTopic( topic : string, orderNumber : string, customAttributes:Object):void;
  static postTicketCreated( topic : string,  itemID : string,  orderNumber : string, customAttributes:Object):void;
  static postFeedbackReceived( feedback : string,  orderNumber : string, customAttributes:Object):void;
  static postQualityOfServiceRated( comment : string,  rating : string,  orderNumber : string, customAttributes:Object):void;
}

export declare class PyzeCommerceWishList{
  static postCreated( uniqueWishListId : string,  wishListType : string, customAttributes:Object):void;
  static postBrowsed( uniqueWishListId : string, customAttributes:Object):void;
  static postAddedItem( uniqueWishListId : string,  itemCategory : string,  itemId : string, customAttributes:Object):void;
  static postRemovedItem( uniqueWishListId : string,  itemCategory : string,  itemId : string, customAttributes:Object):void;
  static postShared( uniqueWishListId : string, customAttributes:Object):void;
}

export declare class PyzeContent{
  static postViewed(contentName : string, categoryName : string, contentId : string, customAttributes:Object):void;
  static postSearched(searchstring : string, customAttributes:Object):void;
  static postRatedOn5PointScale(contentName : string, categoryName : string, contentId : string, rating : Number, customAttributes:Object):void;
  static postRatedThumbsUp(contentName : string, categoryName : string, contentId : string, customAttributes:Object):void;
  static postRatedThumbsDown(contentName : string, categoryName : string, contentId : string, customAttributes:Object):void;
}

export declare class PyzeDrone{
  static postPreflightCheckCompleted(overallStatus : string,  storageStatus : string, droneBatteryChargePercent : string,deviceBatteryChargePercent : string, calibrationStatus : string,  gpsStatus : string, customAttributes:Object):void;
  static postInflightCheckCompleted( overallStatus : string,  rollStatus : string, pitchStatus : string,  yawStatus : string,throttleStatus : string,  trimmingSettings : string, customAttributes:Object):void;
  static postConnected (customAttributes:Object):void;
  static postDisconnected( code : string, customAttributes:Object):void;
  static postAirborne( status : string, customAttributes:Object):void;
  static postLanded( status : string, customAttributes:Object):void;
  static postFlightPathCreated( uniqueFlightPathId : string, customAttributes:Object):void;
  static postFlightPathUploaded( uniqueFlightPathId : string, customAttributes:Object):void;
  static postFlightPathEdited( uniqueFlightPathId : string, customAttributes:Object):void;
  static postFlightPathDeleted( uniqueFlightPathId : string, customAttributes:Object):void;
  static postFlightPathCompleted( uniqueFlightPathId : string, customAttributes:Object):void;
  static postFirstPersonViewEnabled( status : string, customAttributes:Object):void;
  static postFirstPersonViewDisabled( status : string, customAttributes:Object):void;
  static postStartedAerialVideo( status : string, customAttributes:Object):void;
  static postStartedAerialVideoDetailed( status : string,  videoIdentifer : string, customAttributes:Object):void;
  static postStoppedAerialVideo( status : string, secondsLength : string, customAttributes:Object):void;
  static postTookAerialPicture( status : string, customAttributes:Object):void;
  static postStartedAerialTimelapse( status : string, totalshots : Number, secondsBetweenShots : Number, customAttributes:Object):void;
  static postStoppedAerialTimelapse( status : string, customAttributes:Object):void;
  static postRequestedReturnToBase(customAttributes:Object):void;
  static postSwitchedToHelicopterFlyingMode(customAttributes:Object):void;
  static postSwitchedToAltitudeFlyingMode(customAttributes:Object):void;
  static postSwitchedToGPSHoldFlyingMode(customAttributes:Object):void;
  static postSwitchedToCustomFlyingMode(mode : string, customAttributes:Object):void;
  static postSetMaxAltitude(altitudeInMeters : string, customAttributes:Object):void;
  static postSetAutoReturnInSeconds(seconds : Number, customAttributes:Object):void;
  static postSetAutoReturnWhenLowMemory(memoryLeftInKilobytes : Number, customAttributes:Object):void;
  static postSetAutoReturnWhenLowBattery( batterylevelPercent : Number, customAttributes:Object):void;
}

export declare class PyzeExplicitActivation{
  static postWithAttributes(customAttributes:Object):void;
  static post():void;
}

export declare class PyzeGaming{
  static postLevelStarted( level : string, customAttributes:Object):void;
  static postLevelEnded( level : string,  score : string,  success : string, customAttributes:Object):void;
  static postPowerUpConsumed( level : string,  type : string,  value : string, customAttributes:Object):void;
  static postInGameItemPurchased( uniqueItemId : string,  itemType : string,  value : string, customAttributes:Object):void;
  static postAchievementEarned( uniqueAchievementId : string, type : string, customAttributes:Object):void;
  static postSummaryViewed( level : string,  type : string, customAttributes:Object):void;
  static postLeaderBoardViewed( level : string,  score : string, customAttributes:Object):void;
  static postScorecardViewed( level : string,  score : string, customAttributes:Object):void;
  static postHelpViewed( helpTopicId : string, customAttributes:Object):void;
  static postTutorialViewed( helpTopicId : string, customAttributes:Object):void;
  static postFriendChallenged(customAttributes:Object):void;
  static postChallengeAccepted(customAttributes:Object):void;
  static postChallengeDeclined(customAttributes:Object):void;
  static postGameStarted( level : string, customAttributes:Object):void;
  static postGameEnd( levelsPlayed : string,  levelsWon : string, customAttributes:Object):void;
}

export declare class PyzeHealthAndFitness{
  static postStarted(customAttributes:Object):void;
  static postEnded(customAttributes:Object):void;
  static postAchievementReceived(customAttributes:Object):void;
  static postStepGoalCompleted(customAttributes:Object):void;
  static postGoalCompleted(customAttributes:Object):void;
  static postChallengedFriend(customAttributes:Object):void;
  static postChallengeAccepted(customAttributes:Object):void;
}
export declare class PyzeIdentity{
  static setUserIdentifier(userIdentifier : string ):void;
  static resetUserIdentifier():void;
  static postTraits(attributes:Object):void;
}

export declare class PyzeInAppPurchaseRevenue{
  static postPriceListViewed( appScreenRequestFromId : string, customAttributes:Object):void;
  static postBuyItem( itemName : string,  currency,  price : Number, itemType : string,  itemSKU : string,  quantity : string, appScreenRequestFromId : string, status : string,  successOrErrorCode : string, customAttributes:Object):void;
  static postBuyItemShort( itemName : string,  price : Number,  currencyISO4217Code : string, customAttributes:Object):void;
  static postBuyItemUSD( itemName : string,  price : Number, customAttributes:Object):void;
}

export declare class PyzeMedia{
  static postPlayedMedia( contentName : string,  type : string,  categoryName : string, percent : string,  contentId : string, customAttributes:Object):void;
  static postSearched( searchString : string, customAttributes:Object):void;
  static postRateOn5PointScale( contentName : string,  categoryName : string, contentId : string, rating : Number, customAttributes:Object):void;
  static postRatedThumbsUp( contentName : string,  categoryName : string, contentId : string, customAttributes:Object):void;
  static postRatedThumbsDown( contentName : string,  categoryName : string, contentId : string, customAttributes:Object):void;
}

export declare class PyzeMessaging{
  static postMessageSent( uniqueId : string, customAttributes:Object):void;
  //TODO
  static postMessageSentOfType(messageType : string, uniqueId : string, customAttributes:Object):void;
  static postMessageReceived( uniqueId : string, customAttributes:Object):void;
  static postMessageNewConversation( uniqueId : string, customAttributes:Object):void;
  static postMessageVoiceCall( uniqueId : string, customAttributes:Object):void;
}

export declare class PyzePersonalizationIntelligence{
  static getTags(callback: any): void;
  static isTagSet(tag : string):boolean;
  static areAnyTagSet(tags : string[]):boolean;
  static areAllTagSet(tags : string[]):boolean;
}

export declare class PyzeSceneFlow{
  static postSecondsOnScene(sceneName : string, seconds : Number):void;
}

export declare class PyzeSocial{
  static postSocialContentShareForNetworkName( socialNetworkName : string,  contentReference : string, category, customAttributes:Object):void;
  static postLiked( socialNetworkName : string,  contentReference : string, category, customAttributes:Object):void;
  static postFollowed( socialNetworkName : string,  contentReference : string, category, customAttributes:Object):void;
  static postSubscribed( socialNetworkName : string,  contentReference : string, category, customAttributes:Object):void;
  static postInvitedFriends( socialNetworkName : string, customAttributes:Object):void;
  static postFoundFriends( source : string, customAttributes:Object):void;
}

export declare class PyzeSupport{
  static postRequestedPhoneCallback(customAttributes:Object):void;
  static postLiveChatStartedWithTopic( topic : string, customAttributes:Object):void;
  static postLiveChatEndedWithTopic(topic : string, customAttributes:Object):void;
  static postTicketCreated ( itemID : string,  topic : string, customAttributes:Object):void;
  static postFeedbackReceived( feedback : string, customAttributes:Object):void;
  static postQualityOfServiceRated( comment : string, rating : string, customAttributes:Object):void;
}

export declare class PyzeTasks{
  static postAddToCalendarWithAttributes(customAttributes:Object):void;
}

export declare class PyzeWeatherAndForecast{
  static postWeatherRequestedForType(type : string, howManyDays : Number, customAttributes:Object):void;
  static postWeatherHistoricalRequest(startInterval : Number, endInterval : Number, customAttributes:Object):void;
  static postWeatherStationsRequestWithClusterData( clusterData : string, point : Object, customAttributes:Object):void;
  static postWeatherMapLayersRequested( layerName : string, customAttributes:Object):void;
  static postWeatherRequestForUVIndexAtPoint(point : Object, customAttributes:Object):void;
  static postWeatherResponseForType( type : string, customAttributes : string):void;
  static postWeatherResponseForHistoricalData (customAttributes:Object):void;
  static postWeatherStationResponseData(customAttributes:Object):void;
  static postWeatherMapLayersResponse(customAttributes:Object):void;
  static postWeatherResponseForUVIndex(customAttributes:Object):void;
  static postForecastRequestForKeywords ( commaSeperateKeywords : string, customAttributes:Object):void;
  static postForecastResponseForKeywordsShort(customAttributes:Object):void;
  static postForecastFetch(nDays : Number, customAttributes:Object):void;
  static postForecastFetchResponse (customAttributes:Object):void;
}

export declare class PyzeSMS{
  static registerDevice(phoneNumber : string, countryCode: string, customAttributes : Object);
  static sendVerification(phoneNumber : string, countryCode: string, verificationCode:string, customAttributes : Object);
  static unsubscribeDevice(phoneNumber : string, countryCode: string, customAttributes : Object);
}