import { 
  BubblingEventHandler 
} from 'react-native/Libraries/Types/CodegenTypes';

import { 
  BlazeWidgetLayout,
  BlazeDataSourceType,
  OnDataLoadStartedEvent,
  OnDataLoadCompleteEvent,
  OnPlayerDidAppearEvent,
  OnPlayerDidDismissEvent,
  OnItemClickedEvent,
  OnTriggerCTAEvent,
  OnTriggerPlayerBodyTextLinkEvent,
  PresetGridWidgetLayout,
  BlazeMomentsPlayerStyle,
  BlazeStoryPlayerStyle,
  PresetRowWidgetLayout,
  BlazeWidgetDelegate,
  OnPlayerEventTriggeredEventInternal,
  BlazeCachingLevel,
} from '../interfaces';

import {
  ViewProps,
} from 'react-native';
import { 
  BlazeWidgetItemCustomMapping,
  BlazeWidgetItemStyleOverrides
} from '../classes/blaze-widget-overrides-styles';

export interface BlazeBaseWidgetViewProps extends ViewProps {
  dataSource: BlazeDataSourceType;
  cachingLevel?: BlazeCachingLevel;
  blazeWidgetLayout?: BlazeWidgetLayout;
  appOverridesCTAHandling?: boolean;
  widgetDelegate?: BlazeWidgetDelegate;
  shouldOrderWidgetByReadStatus?: boolean;
  perItemStyleOverrides?: Map<BlazeWidgetItemCustomMapping, BlazeWidgetItemStyleOverrides>;
}

export interface BlazeBaseGridWidgetViewProps {
  presetWidgetLayout: PresetGridWidgetLayout;
  isEmbeddedInScrollView?: boolean;
}

export interface BlazeBaseRowWidgetViewProps {
  presetWidgetLayout: PresetRowWidgetLayout;
}

export interface BlazeBaseMomentsWidgetViewProps {
  blazeMomentsPlayerStyle?: BlazeMomentsPlayerStyle;
}

export interface BlazeBaseStoriesWidgetViewProps {
  blazeStoryPlayerStyle?: BlazeStoryPlayerStyle;
}

export interface BlazeSdkBaseWidgetViewProps extends BlazeBaseWidgetViewProps {
  ref?: Object;
  onWidgetDataLoadStartedInternal: BubblingEventHandler<OnDataLoadStartedEvent>;
  onWidgetDataLoadCompletedInternal: BubblingEventHandler<OnDataLoadCompleteEvent>;
  onWidgetPlayerDidAppearInternal: BubblingEventHandler<OnPlayerDidAppearEvent>;
  onWidgetPlayerDismissedInternal: BubblingEventHandler<OnPlayerDidDismissEvent>;
  onItemClickedInternal: BubblingEventHandler<OnItemClickedEvent>;
  onTriggerCTAInternal: BubblingEventHandler<OnTriggerCTAEvent>;
  onTriggerPlayerBodyTextLinkInternal: BubblingEventHandler<OnTriggerPlayerBodyTextLinkEvent>;
  onPlayerEventTriggeredInternal: BubblingEventHandler<OnPlayerEventTriggeredEventInternal>;
  perItemStyleOverridesInternal?: Record<string, BlazeWidgetItemStyleOverrides>;
}