import { Color } from "@/types/colors";

export interface FloatingActionButtonAlign {
  horizontal: "start" | "center" | "end";
  vertical: "top" | "middle" | "bottom";
}

export interface FloatingActionButtonAlignOffset {
  x?: string | number;
  y?: string | number;
}

export interface FloatingActionButtonItemProps {
  children?: any;
  className?: string;
  disabled?: boolean;
  icon?: string;
  index?: number;
  style?: React.CSSProperties;
  tabIndex?: number;
  text?: string;
}

export interface PopupAnimation {}

type FloatingActionButtonPopupSettings = {
  animate?: boolean | PopupAnimation;
  popupClass?: string;
};

export interface FloatingActionButtonHandle {
  element: null | HTMLButtonElement;
  focus: () => void;
}

export interface FloatingActionButtonEvent {
  nativeEvent: any;
  syntheticEvent: React.SyntheticEvent<any>;
  target: FloatingActionButtonHandle;
}

export interface FloatingActionButtonItemEvent {
  itemIndex: number;
  itemProps?: FloatingActionButtonItemProps;
  nativeEvent: any;
  syntheticEvent: React.SyntheticEvent<any>;
  target: FloatingActionButtonHandle;
}

export interface FloatingActionButtonProps {
  dataTestId?: string;
  accessKey?: string;
  align?: FloatingActionButtonAlign;
  alignOffset?: FloatingActionButtonAlignOffset;
  className?: string;
  dir?: string;
  disabled?: boolean;
  icon?: string;
  iconClass?: string;
  id?: string;
  item?: React.ComponentType<any>;
  items?: FloatingActionButtonItemProps[];
  modal?: boolean;
  overlayStyle?: React.CSSProperties;
  popupSettings?: FloatingActionButtonPopupSettings;
  positionMode?: "fixed" | "absolute";
  rounded?: "small" | "medium" | "large" | "full" | null;
  size?: "small" | "medium" | "large" | null;
  style?: React.CSSProperties;
  svgIcon?: any;
  tabIndex?: number;
  text?: string;
  themeColor?: Color;
  onBlur?: (event: FloatingActionButtonEvent) => void;
  onClick?: (event: FloatingActionButtonEvent) => void;
  onClose?: (event: FloatingActionButtonEvent) => void;
  onFocus?: (event: FloatingActionButtonEvent) => void;
  onItemClick?: (event: FloatingActionButtonItemEvent) => void;
  onKeyDown?: (event: FloatingActionButtonEvent) => void;
  onOpen?: (event: FloatingActionButtonEvent) => void;
}
