import { useState } from "react";
import { getTextValue, hasOuterValue } from "../utils";
const getInitialValue = ({ defaultValue, multiple })=>{
    if (multiple) {
        return defaultValue || [];
    }
    return defaultValue || '';
};
export const useValue = ({ outerValue, outerOnChange, defaultValue, multiple, nativeMode, valueToItemMap, renderValue, onChangeValue })=>{
    // Внутреннее состояние для корректной работы в uncontrolled-режиме.
    const [internalValue, setInternalValue] = useState(getInitialValue({
        defaultValue,
        multiple
    }));
    // Актуальное состояние компонента.
    const value = hasOuterValue(outerValue) ? outerValue : internalValue;
    // Состояние поля поиска в target
    const [textValue, setTextValueState] = useState(getTextValue(multiple, value, valueToItemMap, renderValue));
    const setTextValue = (newTextValue)=>{
        if (newTextValue === textValue) {
            return;
        }
        setTextValueState(newTextValue);
        onChangeValue?.(newTextValue);
    };
    const handleChange = (newValue, item)=>{
        setInternalValue(newValue);
        if (outerOnChange && !nativeMode) {
            outerOnChange(newValue, item);
        }
    };
    return {
        value,
        handleChange,
        textValue,
        setTextValue
    };
};
