"use strict";
Object.defineProperty(exports, "__esModule", {
    value: true
});
Object.defineProperty(exports, "usePopup", {
    enumerable: true,
    get: function() {
        return usePopup;
    }
});
const _react = require("react");
const _PopupContext = require("../PopupContext");
// Хук для подключения анимации
const usePopupAnimation = ()=>{
    const [endAnimation, setEndAnimation] = (0, _react.useState)(false);
    const [endTransition, setEndTransition] = (0, _react.useState)(false);
    return (0, _react.useMemo)(()=>({
            endAnimation,
            endTransition,
            setEndTransition,
            setEndAnimation
        }), [
        endAnimation,
        endTransition
    ]);
};
const usePopup = ({ isOpen, id, popupInfo, withAnimation })=>{
    const [isVisible, setVisible] = (0, _react.useState)(false);
    const popupController = (0, _PopupContext.usePopupContext)();
    const animationInfo = usePopupAnimation();
    // для использования transition в качестве анимации
    (0, _react.useEffect)(()=>{
        if (withAnimation && animationInfo) {
            animationInfo.setEndTransition(!isVisible || animationInfo?.endAnimation);
        }
    }, [
        animationInfo,
        withAnimation,
        isVisible
    ]);
    // сначала добавление/удаление из контекста, и только после этого отображение/скрытие
    (0, _react.useEffect)(()=>{
        // при первом открытии
        if (isOpen && !isVisible) {
            popupController.register({
                id,
                ...popupInfo
            });
            setVisible(true);
            animationInfo.setEndAnimation(false);
            return;
        }
        if (isOpen || !isVisible) {
            return;
        }
        // если есть анимация - закрытие по окончании анимации
        if (withAnimation) {
            animationInfo.setEndAnimation(true);
            return;
        }
        // иначе обычное закрытие
        popupController.unregister(id);
        setVisible(false);
    }, [
        isOpen,
        isVisible,
        animationInfo
    ]);
    (0, _react.useEffect)(()=>{
        return ()=>{
            popupController.unregister(id);
        };
    }, [
        id
    ]);
    return {
        isVisible,
        setVisible,
        animationInfo,
        withAnimation,
        rootId: popupController.rootId
    };
};
