import * as React from 'react';
import { event as eventBus } from '@ice/stark-data';
import { useCnAiListEventNames } from '../cn-ai-agent/context/cn-ai-list-event-context.js';
import isEqual from 'lodash/isEqual';
/**
 * 获取表格列定义的 Hook
 * 通过监听事件总线的数据更新通知来获取最新数据
 */
export function useColumnDefinitions() {
    const eventNames = useCnAiListEventNames();
    const [columnDefinitions, setColumnDefinitions] = React.useState(undefined);
    // 使用 useRef 存储上一次的数据，通过深度比较避免重复更新
    const prevDataRef = React.useRef(undefined);
    React.useEffect(() => {
        const handleDataUpdate = () => {
            try {
                // 使用可选链访问，避免 window 为 undefined 时的错误
                const getColumnDefinitionsFn = window === null || window === void 0 ? void 0 : window.__getColumnDefinitions;
                if (typeof getColumnDefinitionsFn !== 'function') {
                    return;
                }
                // 调用函数获取数据，添加错误处理
                let data;
                try {
                    data = getColumnDefinitionsFn();
                }
                catch (error) {
                    console.error('[useColumnDefinitions] 获取列定义失败:', error);
                    return;
                }
                // 数据验证：确保是数组
                if (!Array.isArray(data)) {
                    return;
                }
                // 使用深度比较判断数据是否真正变化
                if (!isEqual(data, prevDataRef.current)) {
                    prevDataRef.current = data;
                    setColumnDefinitions(data);
                }
            }
            catch (error) {
                // 捕获所有未预期的错误，避免导致页面崩溃
                console.error('[useColumnDefinitions] 处理数据更新时发生错误:', error);
            }
        };
        // 监听数据更新事件
        eventBus.on(eventNames.TABLE_DATA_UPDATE, handleDataUpdate);
        // 立即尝试获取一次
        handleDataUpdate();
        return () => {
            eventBus.off(eventNames.TABLE_DATA_UPDATE, handleDataUpdate);
        };
    }, [eventNames]);
    return columnDefinitions;
}
