"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.getColumnSections = exports.validatePinnedColumns = void 0;
const ErrorService_1 = require("../../../../services/ErrorService");
const utils_1 = require("../../../utils");
/**
 * Валидирует корректность комбинаций закрепления колонок.
 * Выбрасывает ошибку, если колонки с pinned="right" не идут непрерывным блоком в конце
 * или колонки с pinned="left" не идут непрерывным блоком в начале.
 */
const validatePinnedColumns = (columns) => {
    const errorService = ErrorService_1.ErrorService.getInstance();
    const positions = columns.map((c) => c.pinned ?? 'center');
    const firstRight = positions.indexOf('right');
    if (firstRight !== -1 &&
        positions.slice(firstRight).some((p) => p !== 'right')) {
        errorService.logError('DataGrid', 'Колонки с pinned="right" должны идти непрерывным блоком в конце');
    }
    // left: должны быть в начале
    const lastLeft = positions.lastIndexOf('left');
    if (lastLeft !== -1 &&
        positions.slice(0, lastLeft + 1).some((p) => p !== 'left')) {
        errorService.logError('DataGrid', 'Колонки с pinned="left" должны идти непрерывным блоком в начале');
    }
    columns.forEach((column) => {
        if ((0, utils_1.isGroupColumns)(column) &&
            column.children.some((child) => child.pinned)) {
            errorService.logError('DataGrid', 'pinned должен быть указан у родительской колонки, а не у дочерних элементов');
        }
    });
};
exports.validatePinnedColumns = validatePinnedColumns;
/**
 * Группирует колонки DataGrid по закреплённым позициям (pinned):
 * - left (закреплены слева)
 * - center (обычные, не закреплённые)
 * - right (закреплены справа)
 */
const getColumnSections = (columns) => {
    (0, exports.validatePinnedColumns)(columns);
    const groups = columns.reduce((acc, col) => {
        const position = col.pinned ?? 'center';
        if (!acc[position]) {
            acc[position] = [];
        }
        acc[position].push(col);
        return acc;
    }, {});
    return {
        sections: [
            { position: 'left', columns: groups.left || [] },
            { position: 'center', columns: groups.center || [] },
            { position: 'right', columns: groups.right || [] },
        ],
    };
};
exports.getColumnSections = getColumnSections;
