import { useMemo } from 'react';
/**
 * Группирует элементы описания в логические секции для рендеринга.
 *
 * Обрабатывает входной массив items, который может содержать:
 * - Отдельные объекты DescriptionListItem
 * - Массивы объектов DescriptionListItem (группы)
 *
 * Логика группировки:
 * 1. Последовательные одиночные элементы объединяются в одну секцию
 * 2. Каждый массив элементов становится отдельной секцией
 * 3. Сохраняется оригинальный порядок элементов и групп
 *
 * @param items - Массив элементов для обработки
 * @returns Двумерный массив, где каждый элемент представляет смысловую группу
 */
export const useGroupedDescriptionItems = ({ items, }) => {
    return useMemo(() => {
        // Используем reduce для группировки без изменяемых переменных
        const { groups, currentGroup } = items.reduce((acc, item) => {
            // Для массивов (готовых групп)
            if (Array.isArray(item)) {
                return {
                    // Если есть текущая группа - добавляем её перед новой группой
                    groups: [
                        ...acc.groups,
                        ...(acc.currentGroup.length ? [acc.currentGroup] : []),
                        item,
                    ],
                    // Сбрасываем текущую группу
                    currentGroup: [],
                };
            }
            // Для одиночных элементов - добавляем в текущую группу
            return {
                groups: acc.groups,
                currentGroup: [...acc.currentGroup, item],
            };
        }, { groups: [], currentGroup: [] });
        // Добавляем последнюю группу, если она не пустая
        return currentGroup.length ? [...groups, currentGroup] : groups;
    }, [items]);
};
