// Type definitions for agate/DateTimePicker

import * as React from "react";
import { SkinnableProps as agate_Skinnable_SkinnableProps } from "@enact/agate/Skinnable";
import { ChangeableProps as ui_Changeable_ChangeableProps } from "@enact/ui/Changeable";

type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;
type Merge<M, N> = Omit<M, Extract<keyof M, keyof N>> & N;

export interface DateTimePickerBaseProps {
  /**
 * The "aria-label" for the day picker.
 * 
 * If not specified, the "aria-label" for the day picker will be
a combination of the current value and 'day change a value with up down button'.
 */
  dayAriaLabel?: string;
  /**
   * Disables the  `DateTimePicker` .
   */
  disabled?: boolean;
  /**
 * The "aria-label" for the hour picker
 * 
 * If not specified, the "aria-label" for the hour picker will be
a combination of the current value and 'hour change a value with up down button'.
 */
  hourAriaLabel?: string;
  /**
 * The "aria-label" for the meridiem picker.
 * 
 * If not specified, the "aria-label" for the meridiem picker will be
a combination of the current value and 'change a value with up down button'.
 */
  meridiemAriaLabel?: string;
  /**
 * The "aria-label" for the minute picker.
 * 
 * If not specified, the "aria-label" for the minute picker will be
a combination of the current value and 'minute change a value with up down button'.
 */
  minuteAriaLabel?: string;
  /**
 * The "aria-label" for the month picker.
 * 
 * If not specified, the "aria-label" for the month picker will be
a combination of the current value and 'month change a value with up down button'.
 */
  monthAriaLabel?: string;
  /**
   * Handler for  `onChange`  events
   */
  onChange?: Function;
  /**
   * Called when the component is removed when it had focus.
   */
  onSpotlightDisappear?: Function;
  /**
   * Disables 5-way spotlight from navigating into the component.
   */
  spotlightDisabled?: boolean;
  /**
   * The value of the DateTimePicker.
   */
  value?: Date;
  /**
 * The "aria-label" for the year picker.
 * 
 * If not specified, the "aria-label" for the year picker will be
a combination of the current value and 'year change a value with up down button'.
 */
  yearAriaLabel?: string;
}
/**
 * A date/time Picker component.
 */

export class DateTimePickerBase extends React.Component<
  Merge<React.HTMLProps<HTMLElement>, DateTimePickerBaseProps>
> {}

export interface DateTimePickerDecoratorProps
  extends Merge<
    agate_Skinnable_SkinnableProps,
    ui_Changeable_ChangeableProps
  > {}
export function DateTimePickerDecorator<P>(
  Component: React.ComponentType<P> | string
): React.ComponentType<P & DateTimePickerDecoratorProps>;

export interface DateTimePickerProps
  extends Merge<DateTimePickerBaseProps, DateTimePickerDecoratorProps> {}
/**
 * An Agate themed date/time Picker component.
 */

export class DateTimePicker extends React.Component<
  Merge<React.HTMLProps<HTMLElement>, DateTimePickerProps>
> {}

export default DateTimePicker;
