export enum EventCategory {
  Story = 'Story',
  Widget = 'Widget',
  Moment = 'Moment',
  Ad = 'Ad',
  Interaction = 'Interaction',
}

export enum EventActionName {
  //Global SDK actions
  SdkInit = "sdk_init",
  AppPause = "app_pause",
  AppContinue = "app_continue",

  // Story player
  StoryStart = 'story_start',
  StoryExit = 'story_exit',
  StoryPageStart = 'story_page_start',
  StoryPageExit = 'story_page_exit',

  // Widget
  WidgetLoad = 'widget_load',
  WidgetClick = 'widget_click',

  // Moments player
  MomentsPlaylistStart = 'moments_playlist_start',
  MomentsPlaylistExit = 'moments_playlist_exit',
  MomentStart = 'moment_start',
  MomentExit = 'moment_exit',
  Like = 'like',
  Unlike = 'unlike',

  // Ads - Custom Native
  AdView = 'ad_view',
  AdClick = 'ad_click',
  AdExit = 'ad_exit',
  AdPause = 'ad_playback_pause',
  AdResume = 'ad_playback_play',

  // Ads - IMA
  ImaAllAdsCompleted = 'ima_all_ads_completed',
  ImaAdClicked = 'ima_ad_clicked',
  ImaAdCompleted = 'ima_ad_completed',
  ImaAdLoaded = 'ima_ad_loaded',
  ImaAdPaused = 'ima_ad_paused',
  ImaAdResumed = 'ima_ad_resumed',
  ImaAdSkipped = 'ima_ad_skipped',
  ImaAdStarted = 'ima_ad_started',
  ImaAdTapped = 'ima_ad_tapped',
  ImaAdFirstQuartile = 'ima_ad_first_quartile',
  ImaAdMidpoint = 'ima_ad_midpoint',
  ImaAdThirdQuartile = 'ima_ad_third_quartile',

  // Share player
  CtaClick = 'cta_click',
  Audio = 'audio',
  ShareClick = 'share_click',
  PlaybackPause = 'playback_pause',
  PlaybackPlay = 'playback_play',

  // Interactions
  InteractionView = 'interaction_view',
  InteractionAnswer = 'interaction_answer',
}

export enum ContentType {
  Story = 'Story',
  Moments = 'Moments',
}

export enum ThumbnailType {
  Circle = 'Circle',
  Rectangle = 'Rectangle',
  Main = 'Main',
}

export enum ThumbnailFormat {
  Animated = 'Animated',
  Static = 'Static',
}

export enum WidgetType {
  Row = 'Row',
  Grid = 'Grid',
}

export enum PlayableNavigationType {
  Automatic = 'Automatic',
  Manual = 'Manual',
}

export enum PlayableNavigationDirection {
  Forward = 'Forward',
  Backward = 'Backward',
  Close = 'Close',
}

export enum PlayerStartTriggers {
  Widget = 'Widget',
  Deeplink = 'Deeplink',
  EntryPoint = 'Entry Point',
  WidgetAutoPlay = 'Auto Play From Widget',
  Notification = 'Notification',
}

export enum PlayerExitTriggers {
  Swipe = 'Swipe',
  SwipeDown = 'Swipe Down',
  Skip = 'Skip',
  CloseButton = 'Close Button',
  AppClose = 'App Close',
  AssetsExpiry = 'URL Expiration',
  StoriesCompleted = 'Stories completed',
  BackButton = 'Back Button',
}

export enum PlaybackActionMethod {
  Press = 'Press',
  Release = 'Release',
}

export enum AudioState {
  Mute = 'Mute',
  Unmute = 'Unmute',
}

export interface UserProps {
  generated_user_id: string;
  external_user_id?: string;
  locale: string;
}

export interface ReferringPropsAnalytics {
  origin_widget_id?: string;
  origin_widget_type?: string;
  labels_expression?: string;
}

export interface WidgetProps {
  widget_id?: string;
  widget_type?: WidgetType;
  widget_size?: string;
  widget_content_count?: number;
  content_id?: string;
  content_type?: ContentType;
  content_index?: number;
  thumbnail_size?: string;
  thumbnail_aspect_ratio?: string;
  thumbnail_type?: ThumbnailType;
  widget_content_list?: string;
  animated_thumbnail_enabled: boolean;
  thumbnail_format: ThumbnailFormat;
}

export interface StoryProps {
  story_session_id?: string;
  story_id?: string;
  story_page_id?: string;
  story_page_index?: string;
  story_page_count?: string;
  story_page_navigation_type?: PlayableNavigationType;
  story_page_navigation_direction?: PlayableNavigationDirection;
  story_start_trigger?: PlayerStartTriggers;
  story_exit_trigger?: PlayerExitTriggers;
  story_page_duration_viewed_percent?: number;
  playback_action_method?: PlaybackActionMethod;
  audio_state?: AudioState;
  story_page_duration?: number;
  story_title?: string;
}

export interface MomentsProps {
  moments_session_id?: string;
  moment_id?: string;
  moment_title?: string;
  moment_index?: string;
  moment_navigation_type?: PlayableNavigationType;
  moment_navigation_direction?: PlayableNavigationDirection;
  moment_start_trigger?: PlayerStartTriggers;
  moment_exit_trigger?: PlayerExitTriggers;
  moment_duration?: number;
  moment_duration_viewed_percent?: number;
  playback_action_method?: PlaybackActionMethod;
  audio_state?: AudioState;
  loop_number?: number;
}

export interface AdEventProps {
  // Following properties are relevant for both IMA and CustomNative.
  session_id?: string;
  story_id?: string;
  story_title?: string;
  moment_id?: string;
  moment_title?: string;
  ad_duration?: number;
  advertiser_name?: string;
  content_type?: ContentType;

  // Following properties are relevant only for CustomNative.
  ad_exit_trigger?: PlayerExitTriggers;
  ad_duration_viewed_percent?: number;
  playback_action_method?: PlaybackActionMethod;
  audio_state?: AudioState;
  advertiser_id?: string;
  campaign_id?: string;
  campaign_name?: string;
  ad_server?: string;
  ad_insertion_logic?: string;
  ad_index?: number;

  // Following properties are relevant only for IMA.
  ad_id?: string;
  ad_title?: string;
  ad_description?: string;
  ad_system?: string;
  skippable?: boolean;
  skip_time_offset?: number;
}

export interface InteractionProps {
  content_session_id?: string;
  content_type?: ContentType;
  content_id?: string;
  content_title?: string;
  content_page_id?: string;
  interaction_id?: string;
  interaction_type?: string;
  interaction_text?: string;
  interaction_selected_answer?: string;
  playback_action_method?: PlaybackActionMethod;
  audio_state?: AudioState;
}

export interface IBlazeAnalytics {
  timestamp_utc: string;
  timestamp_user_tz: string;
  sdk_version: string;
  sdk_type: string;
  event_category: EventCategory;
  event_action: EventActionName;
  user: UserProps;
  referring: ReferringPropsAnalytics;
  widget?: WidgetProps;
  story?: StoryProps;
  moment?: MomentsProps;
  ad?: AdEventProps;
  interaction?: InteractionProps;
}
