import { useEffect, useMemo } from 'react';
import { useLocalStorage } from '../../useLocalStorage';
import { ASIDE_LOCAL_STORAGE_KEY } from '../constants';
export const useLogic = ({ isPinned: isPinnedProp, onPin: onPinProp, persistState, }) => {
    useEffect(() => {
        const hasIsPinned = isPinnedProp !== undefined;
        const hasOnPin = onPinProp !== undefined;
        const hasPersistState = persistState !== undefined;
        if (hasIsPinned !== hasOnPin) {
            // biome-ignore lint/suspicious/noConsole: Ошибка для интеграторов
            console.warn('PagePinnableAside: Параметры isPinned и onPin необходимо передавать вместе');
        }
        if (!hasIsPinned && !hasPersistState) {
            // biome-ignore lint/suspicious/noConsole: Ошибка для интеграторов
            console.error('PagePinnableAside: Необходимо передать параметры isPinned и onPin или состояние persistState');
        }
    }, []);
    const isControlled = isPinnedProp !== undefined;
    const localStorageKey = useMemo(() => persistState ? `${ASIDE_LOCAL_STORAGE_KEY}::${persistState.id}` : null, [persistState]);
    // Хук useLocalStorage имеет обязательный параметр key.
    // При его отсутствии используем статично открытое состояние для aside
    const [storedValue = true, setStoredValue] = localStorageKey
        ? // biome-ignore lint/correctness/useHookAtTopLevel: <>
            useLocalStorage(localStorageKey, true)
        : [true, () => undefined];
    const isPinned = isControlled ? isPinnedProp : (storedValue ?? true);
    const togglePin = () => {
        const newValue = !isPinned;
        if (isControlled) {
            return onPinProp?.(newValue);
        }
        setStoredValue(newValue);
    };
    return { isPinned, togglePin };
};
