import { slicedToArray as _slicedToArray } from '../../../_virtual/_rollupPluginBabelHelpers.js';
import { useState } from 'react';
import { hasOuterValue } from '../utils/hasOuterValue.js';
import { getTextValue } from '../utils/getTextValue.js';

var getInitialValue = function getInitialValue(_ref) {
  var defaultValue = _ref.defaultValue,
    multiple = _ref.multiple;
  if (multiple) {
    return defaultValue || [];
  }
  return defaultValue || '';
};
var useValue = function useValue(_ref2) {
  var outerValue = _ref2.outerValue,
    outerOnChange = _ref2.outerOnChange,
    defaultValue = _ref2.defaultValue,
    multiple = _ref2.multiple,
    nativeMode = _ref2.nativeMode,
    valueToItemMap = _ref2.valueToItemMap,
    renderValue = _ref2.renderValue,
    onChangeValue = _ref2.onChangeValue;
  // Внутреннее состояние для корректной работы в uncontrolled-режиме.
  var _useState = useState(getInitialValue({
      defaultValue: defaultValue,
      multiple: multiple
    })),
    _useState2 = _slicedToArray(_useState, 2),
    internalValue = _useState2[0],
    setInternalValue = _useState2[1];

  // Актуальное состояние компонента.
  var value = hasOuterValue(outerValue) ? outerValue : internalValue;

  // Состояние поля поиска в target
  var _useState3 = useState(getTextValue(multiple, value, valueToItemMap, renderValue)),
    _useState4 = _slicedToArray(_useState3, 2),
    textValue = _useState4[0],
    setTextValueState = _useState4[1];
  var setTextValue = function setTextValue(newTextValue) {
    if (newTextValue === textValue) {
      return;
    }
    setTextValueState(newTextValue);
    onChangeValue === null || onChangeValue === void 0 || onChangeValue(newTextValue);
  };
  var handleChange = function handleChange(newValue, item) {
    setInternalValue(newValue);
    if (outerOnChange && !nativeMode) {
      outerOnChange(newValue, item);
    }
  };
  return {
    value: value,
    handleChange: handleChange,
    textValue: textValue,
    setTextValue: setTextValue
  };
};

export { useValue };
