#import <Foundation/Foundation.h>

/// Predefined (internal) event names.
// LINT.IfChange

/// Returns a dictionary that maps full internal event names to their respective abbreviated name.
extern NSDictionary<NSString *, NSString *> *APMInternalEventNames(void);

/// Returns a dictionary that maps abbreviated event names to their full external name.
extern NSDictionary<NSString *, NSString *> *APMExternalEventNames(void);

/// Ad active view event name. Signifies that the conditions for an ActiveView have been met.
static NSString *const kAPMEventAdActiveView = @"_aa";

/// Ad click event name. Signifies that the user has clicked on an ad that was served by AdMob.
static NSString *const kAPMEventAdClick = @"_ac";

/// Ad exposure event name. Signifies that the user has been exposed to at least one advertisement.
static NSString *const kAPMEventAdExposure = @"_xa";

/// Ad impression event name. Signifies that the user has been served an advertising impression by
/// AdMob.
static NSString *const kAPMEventAdImpression = @"_ai";

/// Ad query event name. Signifies that the Mobile Ads SDK has requested an ad.
static NSString *const kAPMEventAdQuery = @"_aq";

/// Ad unit exposure event name. Signifies that the user has been exposed to a specific ad unit.
static NSString *const kAPMEventAdUnitExposure = @"_xu";

/// App update event name.
static NSString *const kAPMEventAppUpdate = @"_au";

/// App exception event name.
static NSString *const kAPMEventAppException = @"_ae";

/// Error event name.
static NSString *const kAPMEventError = @"_err";

/// Event generated by the SDK to represent events attached as parameters to a parent event.
///
/// In addition to the developer-supplied parameters, each generated event has a number of
/// automatically generated params to explain the relationship between this event and the
/// originating event:
/// <ul>
///   <li>kAPMParameterEventID</li>
///   <li>kAPMParameterEventName</li>
///   <li>kAPMParameterExtraParamIndex</li>
///   <li>kAPMParameterGroupName</li>
///   <li>kAPMParameterListLength</li>
/// </ul>
static NSString *const kAPMEventExtraParameter = @"_ep";

/// Campaign event name.
static NSString *const kAPMEventGACampaign = @"_cmp";

/// First open event name.
static NSString *const kAPMEventFirstOpen = @"_f";

/// Validated in-app purchase event name.
static NSString *const kAPMEventInAppPurchase = @"_iap";

/// Unvalidated in-app purchase event name.
static NSString *const kAPMEventInAppPurchaseX = @"_iapx";

/// Subscription conversion (free -> paid) event name.
static NSString *const kAPMEventSubscriptionConversion = @"_assc";

/// Subscription renewal event name.
static NSString *const kAPMEventSubscriptionRenewal = @"_assr";

/// Subscription cancellation event name.
static NSString *const kAPMEventSubscriptionCancellation = @"_asse";

/// App Store refund event name.
static NSString *const kAPMEventAppStoreRefund = @"_asr";

/// OS update event name.
static NSString *const kAPMEventOSUpdate = @"_ou";

/// Session start event name.
static NSString *const kAPMEventSessionStart = @"_s";

/// User engagement event name.
static NSString *const kAPMEventUserEngagement = @"_e";

/// Screen view event name.
static NSString *const kAPMEventInternalScreenView = @"_vs";

/// Notification receive event name.
static NSString *const kAPMEventNotificationReceive = @"_nr";

/// Notification dismiss event name.
static NSString *const kAPMEventNotificationDismiss = @"_nd";

/// Notification open event name.
static NSString *const kAPMEventNotificationOpen = @"_no";

/// Notification foreground event name.
static NSString *const kAPMEventNotificationForeground = @"_nf";

/// App background event name. http://go/analytics-lifecycle-signals
static NSString *const kAPMEventAppBackground = @"_ab";

/// Logged by Firebase Client SDKs to indicate a new session start with features enabled.
/// http://go/cfu-feature-filter
static NSString *const kAPMEventSessionStartWithRollout = @"_ssr";

/// Ad Reward event name. Log this event when the user was granted a reward after viewing a rewarded
/// ad. Params:
/// <ul>
///     <li>kAPMParameterContentType</li>
///     <li>kAPMParameterValue</li>
/// </ul>
static NSString *const kAPMEventAdReward = @"_ar";

/// SKAdNetwork postback value updated
static NSString *const kAPMEventSKANCVUpdated = @"_skan";

// When adding an internal event that is visible to TagManager, update the
// mapping in e-macro-mobile.pix, and the Google Analytics for Firebase header.
// LINT.ThenChange(
//    //depot/google3/analytics/container_tag/vendor_templates/macros/event_name/e-macro-mobile.pix,
//    //depot/google3/analytics/mobile/experimentation/plx/internal_event_stats_table/\
//          internal_event_stats.sql,
//    //depot/google3/googlemac/iPhone/Firebase/Analytics/InternalHeaders/FIREventNames+Internal.h)

/// Invalid/expired campaign event name.
static NSString *const kAPMEventGACampaignX = @"_cmpx";

/// Ad consented event name.
static NSString *const kAPMEventFirstOpenConsented = @"_fx";

/// Returns a dictionary that maps the allowed internal event names to the public event names that
/// developers can log.
extern NSDictionary<NSString *, NSString *> *APMInternalEventNamesByPublicEventNames(void);

#pragma mark - Deprecated names removed in M115

/// (Deprecated) Checkout progress. Kept internally to maintain backward compatibility as an allowed
/// ecommerce event name.
static NSString *const kAPMEventCheckoutProgress = @"checkout_progress";

/// (Deprecated) E-Commerce purchase event. Kept internally to maintain backward compatibility as an
/// allowed ecommerce event name and in case developers are renaming the event to the recommended
/// name "purchase" with event-editing.
static NSString *const kAPMEventEcommercePurchase = @"ecommerce_purchase";

/// (Deprecated) E-Commerce purchase refund event. Kept internally to maintain backward
/// compatibility as an allowed ecommerce event name and in case developers are renaming the event
/// to the recommended name "refund" with event-editing.
static NSString *const kAPMEventPurchaseRefund = @"purchase_refund";

/// (Deprecated) Set checkout option. Kept internally to maintain backward compatibility as an
/// allowed ecommerce event name.
static NSString *const kAPMEventSetCheckoutOption = @"set_checkout_option";

#pragma mark - TCF Data

#ifdef APM_FEATURE_FLAG_TCF

/// The name of the event that is logged when the TCF data changes.
static NSString *const kAPMEventTCFDataChanged = @"_tcf";

#endif  // APM_FEATURE_FLAG_TCF

#pragma mark - Consent Stitching

#ifdef APM_FEATURE_FLAG_DCU_EVENT

/// DMA consent update event name.
static NSString *const kAPMEventDCU = @"_dcu";

#endif  // APM_FEATURE_FLAG_DCU_EVENT
