import { PickerProps } from '@react-native-picker/picker';
import { ItemValue } from '@react-native-picker/picker/typings/Picker';
import { RefObject } from 'react';

export interface IRNNPPicker {
  /**
   * ID of the picker, which will be used as key in the returned value object.
   * @example if you have a picker with {id: 'amountOfPizzas', ... }, the returned value object will be: {amountOfPizzas: 3}
   * @type {string}
   * @memberof IRNNPPicker
   */
  id: string;
  /**
   * Picker ref
   * @type {*}
   * @memberof IRNNPPicker
   */
  ref?: RefObject<{focus: () => void, blur: () => void}>;
  /**
   * Add a label which will prefix a picker item.
   * @example if label:'EURO' your picker item will look like: 3 EURO
   * @type {string}
   * @memberof IRNNPPicker
   */
  label?: string;
  /**
   * Min value of the picker to start with.
   * @type {number}
   * @memberof IRNNPPicker
   */
  min: number;
  /**
   * Max value of the picker to end with.
   * @type {number}
   * @memberof IRNNPPicker
   */
  max: number;
  /**
   * Amount to increment/decrement the value by.
   * @type {number}
   * @memberof IRNNPPicker
   */
  step?: number;
}

export interface IValue {
  [key: string]: ItemValue;
}

export interface INumberPleaseProps extends PickerProps {
  /**
   * Initialise all the pickers with the given values.
   * @type {IRNNPPicker[]}
   * @memberof INumberPleaseProps
   */
  pickers: IRNNPPicker[];
  /**
   * Controled value to be displayed in the pickers.
   * @type {IValue}
   * @memberof INumberPleaseProps
   */
  values: IValue;
  /**
   * Callback function to be called when the value of any picker changes.
   * @param {*} value
   * @return {*}  {*}
   * @memberof INumberPleaseProps
   */
  onChange(value: any): any;
  /**
   * Divider to be used to seperate pickers.
   * @type {*}
   * @memberof INumberPleaseProps
   */
  divider?: any;
}
