"use strict";
/**
 * 字段显示隐藏工具函数
 * 处理字段显示/隐藏时的位置恢复逻辑
 */
Object.defineProperty(exports, "__esModule", { value: true });
exports.handleFieldVisibilityChange = handleFieldVisibilityChange;
/**
 * 处理字段显示隐藏变化
 * 当字段隐藏后再显示时，会恢复到隐藏前的位置
 *
 * @param values - 用户选择的新可见字段列表
 * @param previousVisibleFields - 之前的可见字段列表
 * @param fullColumnOrder - 完整的字段顺序（包括隐藏的字段）
 * @param allFieldIds - 所有字段的ID列表（用于确保新字段被添加到顺序中）
 * @returns 处理结果，包含排序后的可见字段和更新后的完整顺序
 */
function handleFieldVisibilityChange(values, previousVisibleFields, fullColumnOrder, allFieldIds) {
    // 找出新增的字段（从隐藏变为显示）
    const newlyShownFields = values.filter((field) => !previousVisibleFields.includes(field));
    // 1. 先按照完整顺序过滤出可见字段（不包括新增显示的字段）
    const existingVisibleFields = fullColumnOrder.filter((field) => values.includes(field) && !newlyShownFields.includes(field));
    // 2. 如果有新增显示的字段，需要将它们插入到原来的位置
    // 对于新增显示的字段，找到它们在完整顺序中的位置，插入到正确位置
    const orderedVisibleFields = [...existingVisibleFields];
    newlyShownFields.forEach((newField) => {
        const originalIndex = fullColumnOrder.indexOf(newField);
        if (originalIndex !== -1) {
            // 找到在 originalIndex 之前最后一个可见字段的位置
            let insertIndex = orderedVisibleFields.length;
            for (let i = originalIndex - 1; i >= 0; i--) {
                const prevField = fullColumnOrder[i];
                const prevFieldIndex = orderedVisibleFields.indexOf(prevField);
                if (prevFieldIndex !== -1) {
                    insertIndex = prevFieldIndex + 1;
                    break;
                }
            }
            // 如果前面没有可见字段，插入到开头
            if (insertIndex === orderedVisibleFields.length) {
                let foundBefore = false;
                for (let i = 0; i < originalIndex; i++) {
                    if (values.includes(fullColumnOrder[i])) {
                        foundBefore = true;
                        break;
                    }
                }
                if (!foundBefore) {
                    insertIndex = 0;
                }
            }
            orderedVisibleFields.splice(insertIndex, 0, newField);
        }
    });
    // 更新完整字段顺序：确保所有字段都在顺序中（包括隐藏的）
    // 如果 columnDefinitions 中有新字段，添加到顺序末尾
    const updatedColumnOrder = [...fullColumnOrder];
    allFieldIds.forEach((fieldId) => {
        if (!updatedColumnOrder.includes(fieldId)) {
            updatedColumnOrder.push(fieldId);
        }
    });
    return {
        orderedVisibleFields,
        updatedColumnOrder,
    };
}
