import { BaseUniDriver } from 'wix-ui-test-utils/base-driver';
import { SyntheticEventData } from 'react-dom/test-utils';
import { InputSize } from './index';
import { StatusIndications } from '../common';

export interface InputUniDriver extends BaseUniDriver {
  click: () => Promise<void>;
  getInputElementClasses: () => Promise<string>;
  suffixComponentExists: (style: string) => Promise<boolean>;
  getRootElementClasses: () => Promise<string>;
  getAriaDescribedby: () => Promise<string | null>;
  getAriaLabel: () => Promise<string | null>;
  getName: () => Promise<string | null>;
  getMaxLength: () => Promise<string | null>;
  getType: () => Promise<string | null>;
  getAriaControls: () => Promise<string | null>;
  clickIconAffix: () => Promise<void>;
  clickCustomAffix: () => Promise<void>;
  hasSuffix: () => Promise<boolean>;
  prefixComponentExists: (style: string) => Promise<boolean>;
  hasPrefix: () => Promise<boolean>;
  hasClearButton: () => Promise<boolean>;
  clickClear: () => Promise<void>;
  getValue: () => Promise<string>;
  getText: () => Promise<string>;
  getPlaceholder: () => Promise<string | null>;
  isOfSize: (size: InputSize) => Promise<boolean>;
  getSize: () => Promise<InputSize | null>;
  isDisabled: () => Promise<boolean>;
  isHoveredStyle: () => Promise<boolean>;
  isFocusedStyle: () => Promise<boolean>;
  getRequired: () => Promise<any>;
  enterText: (value: string) => Promise<void>;
  getAutocomplete: () => Promise<string | null>;
  getDefaultValue: () => Promise<any>;
  getUnit: () => Promise<string>;
  getTabIndex: () => Promise<any>;
  isCustomInput: () => Promise<boolean>;
  getReadOnly: () => Promise<any>;
  getDisabled: () => Promise<any>;
  getTextOverflow: () => Promise<string>;
  focus: () => Promise<void>;
  blur: () => Promise<void>;
  keyUp: () => Promise<void>;
  keyDown: (eventData: SyntheticEventData) => Promise<void>;
  paste: () => Promise<void>;
  wheel: () => Promise<void>;
  trigger(value: 'focus'): Promise<void>;
  trigger(value: 'blur'): Promise<void>;
  trigger(value: 'keyUp'): Promise<void>;
  trigger(value: 'paste'): Promise<void>;
  trigger(value: 'change'): Promise<void>;
  trigger(value: 'keyDown', event: SyntheticEventData): Promise<void>;
  trigger(value: 'wheel'): Promise<void>;
  isFocus: () => Promise<boolean>;
  hasHelp: () => Promise<boolean>;
  clickUnit: () => Promise<void>;
  hasMagnifyingGlass: () => Promise<boolean>;
  clickMagnifyingGlass: () => Promise<void>;
  clickMenuArrow: () => Promise<void>;
  hasMenuArrow: () => Promise<boolean>;
  isRTL: () => Promise<boolean>;
  getCursorLocation: () => Promise<number>;
  clearText: () => Promise<void>;
  clickOutside: () => boolean;

  // Status
  hasStatus: (status: StatusIndications) => Promise<boolean>;
  getStatusMessage: () => Promise<string | null>;
}
