/*!
 @header    GAIFields.h
 @abstract  Google Analytics iOS SDK Hit Format Header
 @copyright Copyright 2013 Google Inc. All rights reserved.
 */

#import <Foundation/Foundation.h>

/*!
 These fields can be used for the wire format parameter names required by
 the |GAITracker| get, set and send methods as well as the set methods in the
 |GAIDictionaryBuilder| class.
 */
extern NSString *const kGAIUseSecure;

extern NSString *const kGAIHitType;
extern NSString *const kGAITrackingId;
extern NSString *const kGAIClientId;
extern NSString *const kGAIDataSource;
extern NSString *const kGAIAnonymizeIp;
extern NSString *const kGAISessionControl;
extern NSString *const kGAIDeviceModelVersion;
extern NSString *const kGAIScreenResolution;
extern NSString *const kGAIViewportSize;
extern NSString *const kGAIEncoding;
extern NSString *const kGAIScreenColors;
extern NSString *const kGAILanguage;
extern NSString *const kGAIJavaEnabled;
extern NSString *const kGAIFlashVersion;
extern NSString *const kGAINonInteraction;
extern NSString *const kGAIReferrer;
extern NSString *const kGAILocation;
extern NSString *const kGAIHostname;
extern NSString *const kGAIPage;
extern NSString *const kGAIDescription;  // synonym for kGAIScreenName
extern NSString *const kGAIScreenName;   // synonym for kGAIDescription
extern NSString *const kGAITitle;
extern NSString *const kGAIAdMobHitId;
extern NSString *const kGAIAppName;
extern NSString *const kGAIAppVersion;
extern NSString *const kGAIAppId;
extern NSString *const kGAIAppInstallerId;
extern NSString *const kGAIUserId;

extern NSString *const kGAIEventCategory;
extern NSString *const kGAIEventAction;
extern NSString *const kGAIEventLabel;
extern NSString *const kGAIEventValue;

extern NSString *const kGAISocialNetwork;
extern NSString *const kGAISocialAction;
extern NSString *const kGAISocialTarget;

extern NSString *const kGAITransactionId;
extern NSString *const kGAITransactionAffiliation;
extern NSString *const kGAITransactionRevenue;
extern NSString *const kGAITransactionShipping;
extern NSString *const kGAITransactionTax;
extern NSString *const kGAICurrencyCode;

extern NSString *const kGAIItemPrice;
extern NSString *const kGAIItemQuantity;
extern NSString *const kGAIItemSku;
extern NSString *const kGAIItemName;
extern NSString *const kGAIItemCategory;

extern NSString *const kGAICampaignSource;
extern NSString *const kGAICampaignMedium;
extern NSString *const kGAICampaignName;
extern NSString *const kGAICampaignKeyword;
extern NSString *const kGAICampaignContent;
extern NSString *const kGAICampaignId;
extern NSString *const kGAICampaignAdNetworkClickId;
extern NSString *const kGAICampaignAdNetworkId;

extern NSString *const kGAITimingCategory;
extern NSString *const kGAITimingVar;
extern NSString *const kGAITimingValue;
extern NSString *const kGAITimingLabel;

extern NSString *const kGAIExDescription;
extern NSString *const kGAIExFatal;

extern NSString *const kGAISampleRate;

extern NSString *const kGAIIdfa;
extern NSString *const kGAIAdTargetingEnabled;

// hit types
extern NSString *const kGAIAppView DEPRECATED_MSG_ATTRIBUTE("Use kGAIScreenView instead.");
extern NSString *const kGAIScreenView;
extern NSString *const kGAIEvent;
extern NSString *const kGAISocial;
extern NSString *const kGAITransaction;
extern NSString *const kGAIItem;
extern NSString *const kGAIException;
extern NSString *const kGAITiming;

/*!
 This class provides several fields and methods useful as wire format parameter
 names.  The methods are used for wire format parameter names that are indexed.
 */

@interface GAIFields : NSObject

/*!
 Generates the correct parameter name for a content group with an index.

 @param index the index of the content group.

 @return an NSString representing the content group parameter for the index.
 */
+ (NSString *)contentGroupForIndex:(NSUInteger)index;

/*!
 Generates the correct parameter name for a custon dimension with an index.

 @param index the index of the custom dimension.

 @return an NSString representing the custom dimension parameter for the index.
 */
+ (NSString *)customDimensionForIndex:(NSUInteger)index;

/*!
 Generates the correct parameter name for a custom metric with an index.

 @param index the index of the custom metric.

 @return an NSString representing the custom metric parameter for the index.
 */
+ (NSString *)customMetricForIndex:(NSUInteger)index;

@end
