import type { IBoxProps } from '../Box';

export type ISliderProps = IBoxProps & {
  value?: number;
  defaultValue?: number;
  min?: number;
  max?: number;
  step?: number;
  onChange?: (value: number) => void;
  onChangeEnd?: (value: number) => void;
  isReadOnly?: boolean;
  trackColor?: string;
  // TODO: need to be implemented
  // onFocus?: () => void;
  // onBlur?: () => void;
  // onMouse?: () => void;
  // getAriaValueText?: (value?: number) => string;
  orientation?: 'vertical' | 'horizontal';
  size?: 'sm' | 'md' | 'lg';
  colorScheme?: string;
  name?: string;
  id?: string;
  children?: React.ReactNode;
  isDisabled?: boolean;
  isReversed?: boolean;
  // Steps when using volume up/down gestures or Swipe up/down gestures on iOS.
  accessibilityIncrementSteps?: number;

  // Steps when using volume up/down gestures or Swipe up/down gestures on iOS.
  accessibilityDecrementSteps?: number;
  style?: any;
};
export type ISliderContextProps = {
  trackColor?: string;
  sliderOffset?: number;
  colorScheme?: string;
  activeColor?: string;
  barSize?: number;
  sliderSize?: number;
  thumbSize?: number;
  panResponder?: any;
  isReversed?: boolean;
  isDisabled?: boolean;
  orientation?: 'vertical' | 'horizontal';
};

export type ISliderComponentType = ((props: ISliderProps) => JSX.Element) & {
  Thumb: React.MemoExoticComponent<(props: IBoxProps) => JSX.Element>;
  Track: React.MemoExoticComponent<(props: IBoxProps) => JSX.Element>;
  FilledTrack: React.MemoExoticComponent<(props: IBoxProps) => JSX.Element>;
};
