import { useEffect, useMemo, useState } from 'react';
import { ONE_HUNDRED_PERCENT } from './constants';
import { createComputedColumns } from './utils/createComputedColumns';
import { createInitialColumnsWidths } from './utils/createInitialColumnsWidths';
import { createStorageKey } from './utils/createStorageKey';
/**
 * Хук для работы с логикой сохранения измененных значений
 */
export const useComputedColumns = (columns, storage = localStorage) => {
    const key = useMemo(() => createStorageKey(columns), [columns]);
    const [columnsWidths, setColumnsWidths] = useState(() => createInitialColumnsWidths(columns, key, storage));
    const { computedColumns, actionsColumnWidth } = useMemo(() => createComputedColumns(columns, columnsWidths), [columns, columnsWidths]);
    // хук для синхронизации измененных значений с localStorage
    useEffect(() => storage.setItem(key, JSON.stringify(columnsWidths)), [computedColumns, key]);
    // хук для проверки суммы ширин колонок
    useEffect(() => {
        const nonActionColumns = columns.filter(({ field }) => field !== '$actions');
        const percentageSum = nonActionColumns.reduce((sum, item) => sum + parseFloat(item.width), 0);
        if (percentageSum !== ONE_HUNDRED_PERCENT) {
            // biome-ignore lint/suspicious/noConsole: Ошибка для интеграторов
            console.warn(`Для корректной работы изменения пользователем ширины колонок таблицы необходимо, чтобы сумма всех процентов колонок была бы равна 100. Текущее значение: ${percentageSum}`);
        }
    }, []);
    return {
        columnsWidths,
        setColumnsWidths,
        computedColumns,
        actionsColumnWidth,
    };
};
