"use strict";
Object.defineProperty(exports, "__esModule", {
    value: true
});
Object.defineProperty(exports, "showColumn", {
    enumerable: true,
    get: function() {
        return showColumn;
    }
});
const _templateLiteralTag = require("../../../../helpers/templateLiteralTag");
const _errors = require("../../../../helpers/errors");
function showColumn(nodeToProcess, gridColumnIndex) {
    if (!Number.isInteger(gridColumnIndex)) {
        (0, _errors.throwWithCause)('The passed gridColumnIndex argument has invalid type.');
    }
    if (nodeToProcess.childs.length > 0) {
        (0, _errors.throwWithCause)((0, _templateLiteralTag.toSingleLine)`The passed node is not the last node on the tree. Only for\x20
the last node, the show column modification can be applied.`);
    }
    const { crossHiddenColumns } = nodeToProcess.data;
    if (!crossHiddenColumns.includes(gridColumnIndex)) {
        return;
    }
    let isCollapsibleNode = false;
    nodeToProcess.walkUp((node)=>{
        const { data: { collapsible } } = node;
        if (collapsible) {
            isCollapsibleNode = true;
            return false; // Cancel tree traversing
        }
    });
    // TODO: When the node is collapsible do not show the column. Currently collapsible headers
    // does not work with hidden columns (hidden index map types).
    if (isCollapsibleNode) {
        return;
    }
    nodeToProcess.walkUp((node)=>{
        const { data } = node;
        data.crossHiddenColumns.splice(data.crossHiddenColumns.indexOf(gridColumnIndex), 1);
        if (!data.isHidden && data.colspan < data.origColspan) {
            data.colspan += 1;
        }
        data.isHidden = false;
    });
}
