// Type definitions for agate/ArcPicker

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

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 ArcPickerBaseProps {
  /**
   * The value options of ArcPicker.
   */
  children: Array<any>;
  /**
   * The color of the unselected arcs.
   */
  backgroundColor?: string;
  /**
   * Whether or not the component is in a disabled state.
   */
  disabled?: boolean;
  /**
   * The end angle(in degrees) of the arc.
   *
   * The value should be between 0 and 360 and should be greater than startAngle.
   */
  endAngle?: number;
  /**
   * The color of the selected arcs.
   */
  foregroundColor?: string;
  /**
   * Called when the path area is clicked.
   */
  onClick?: Function;
  /**
   * The radius of the arc circle.
   */
  radius?: number;
  /**
   * The selection type of ArcPicker.
   */
  selectionType?: "cumulative" | "single";
  /**
   * Nodes to be inserted in the center of the ArcPicker.
   */
  slotCenter?: React.ReactNode;
  /**
   * The start angle(in degrees) of the arc.
   *
   * The value should be between 0 and 360.
   */
  startAngle?: number;
  /**
   * The stroke width of the arc picker.
   */
  strokeWidth?: number;
  /**
   * Value of ArcPicker.
   */
  value?: number | string;
}
/**
 * An Agate component for displaying an arc picker.
This component is most often not used directly but may be composed within another component as it
is within  ArcPicker  .
 */

export class ArcPickerBase extends React.Component<
  Merge<React.HTMLProps<HTMLElement>, ArcPickerBaseProps>
> {}

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

export interface ArcPickerProps
  extends Merge<ArcPickerBaseProps, ArcPickerDecoratorProps> {}
/**
 * An arc picker component, ready to use in Agate applications.
 * 
 * Usage:
 * ```
<ArcPicker backgroundColor="#444444" endAngle={200} foregroundColor="#eeeeee" selectionType="single" startAngle={0} />
```
 */

export class ArcPicker extends React.Component<
  Merge<React.HTMLProps<HTMLElement>, ArcPickerProps>
> {}

export default ArcPicker;
