import { BlazeFont, BlazeMargins } from './';

export interface BlazeWidgetLayout {
  horizontalItemsSpacing?: number;
  verticalItemsSpacing?: number;
  itemRatio?: number;
  margins?: BlazeMargins;
  columns?: number;
  maxDisplayItemsCount?: number;
  widgetItemStyle?: BlazeWidgetItemStyle;
}

export interface BlazeWidgetItemStyle {
  title?: BlazeWidgetItemTitleStyle;
  image?: BlazeWidgetItemImageStyle;
  statusIndicator?: BlazeWidgetItemStatusIndicatorStyle;
  backgroundColor?: string;
  cornerRadius?: number;
  cornerRadiusRatio?: number;
  margins?: BlazeMargins;
  badge?: BlazeWidgetItemBadgeStyle;
}

export type BlazeThumbnailType = 'SquareIcon' | 'VerticalTwoByThree' | 'Custom';

export type BlazeWidgetItemImagePosition =
  | 'TopStart'
  | 'TopCenter'
  | 'TopEnd'
  | 'CenterStart'
  | 'Center'
  | 'CenterEnd'
  | 'BottomStart'
  | 'BottomCenter'
  | 'BottomEnd';

export type BlazeTextAlign = 'Start' | 'Center' | 'End';

export type BlazeWidgetGradientPosition = 'Top' | 'Center' | 'Bottom';

export type BlazeObjectXPosition =
  | 'LeadingToLeading'
  | 'LeadingToTrailing'
  | 'TrailingToLeading'
  | 'TrailingToTrailing'
  | 'CenterX'
  | 'CenterToLeading'
  | 'CenterToTrailing';

export type BlazeObjectYPosition =
  | 'BottomToTop'
  | 'BottomToBottom'
  | 'TopToBottom'
  | 'TopToTop'
  | 'CenterToTop'
  | 'CenterY'
  | 'CenterToBottom';

export interface BlazeWidgetItemImageStyle {
  position?: BlazeWidgetItemImagePosition;
  thumbnailType?: BlazeThumbnailType;
  width?: number;
  height?: number;
  ratio?: number;
  cornerRadius?: number;
  cornerRadiusRatio?: number;
  border?: BlazeWidgetItemImageContainerBorderStyle;
  gradientOverlay?: BlazeWidgetGradient;
  margins?: BlazeMargins;
  animatedThumbnail?: BlazeWidgetItemImageAnimatedThumbnailStyle;
}

export interface BlazeWidgetItemImageAnimatedThumbnailStyle {
  isEnabled?: boolean;
  horizontalAnimationTriggerPercentage?: number;
}

export interface BlazeWidgetItemImageContainerBorderStyle {
  isVisible?: boolean;
  liveReadState?: BlazeWidgetItemImageContainerBorderStateStyle;
  liveUnreadState?: BlazeWidgetItemImageContainerBorderStateStyle;
  readState?: BlazeWidgetItemImageContainerBorderStateStyle;
  unreadState?: BlazeWidgetItemImageContainerBorderStateStyle;
}

export interface BlazeWidgetItemImageContainerBorderStateStyle {
  isVisible?: boolean;
  color?: string; //Hex
  margin?: number;
  width?: number;
}

export interface BlazeWidgetItemTitleStyle {
  isVisible?: boolean;
  readState?: BlazeTitleStyle;
  unreadState?: BlazeTitleStyle;
  position?: BlazeObjectPositioning;
  margins?: BlazeMargins;
}

export interface BlazeWidgetItemBadgeStyle {
  position?: BlazeObjectPositioning;
  isVisible?: boolean;
  margins?: BlazeMargins;
  titlePadding?: BlazeMargins;
  liveUnreadState?: BlazeWidgetItemBadgeStateStyle;
  liveReadState?: BlazeWidgetItemBadgeStateStyle;
  unreadState?: BlazeWidgetItemBadgeStateStyle;
  readState?: BlazeWidgetItemBadgeStateStyle;
}

export interface BlazeWidgetItemBadgeStateStyle {
  width?: number;
  height?: number;
  textStyle?: BlazeTitleStyle;
  text?: String;
  backgroundColor?: string;
  backgroundImage?: BlazeImage;
  cornerRadius?: number;
  cornerRadiusRatio?: number;
  borderColor?: string;
  borderWidth?: number;
  isVisible?: boolean;
}

export interface BlazeTitleStyle {
  font?: BlazeFont;
  textSize?: number;
  letterSpacing?: number;
  textColor?: string; //Hex
  lineHeight?: number;
  maxLines?: number;
  textAlign?: BlazeTextAlign;
}

export interface BlazeImage {
  // This is the image's actual name and used by iOS to load the image.
  // Or image's file name in the app's image folder used by Android (without file extention).
  imageName?: string;
}

export interface BlazeObjectPositioning {
  xPosition?: BlazeObjectXPosition;
  yPosition?: BlazeObjectYPosition;
}

export interface BlazeWidgetGradient {
  isVisible?: boolean;
  position?: BlazeWidgetGradientPosition;
  startColor?: string;
  endColor?: string;
}

export interface BlazeWidgetItemStatusIndicatorStyle {
  isVisible?: boolean;
  position?: BlazeObjectPositioning;
  margins?: BlazeMargins;
  statusTitlePadding?: BlazeMargins;
  liveUnreadState?: BlazeWidgetItemStatusIndicatorStateStyle;
  liveReadState?: BlazeWidgetItemStatusIndicatorStateStyle;
  unreadState?: BlazeWidgetItemStatusIndicatorStateStyle;
  readState?: BlazeWidgetItemStatusIndicatorStateStyle;
}

export interface BlazeWidgetItemStatusIndicatorStateStyle {
  isVisible?: boolean;
  backgroundColor?: string;
  backgroundImage?: BlazeImage;
  textStyle?: BlazeTitleStyle;
  text?: string;
  cornerRadius?: number;
  cornerRadiusRatio?: number;
  borderColor?: string;
  borderWidth?: number;
}
