"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.getFieldIcon = exports.getFieldComponentType = void 0;
exports.useFieldIcon = useFieldIcon;
const react_1 = require("react");
const field_type_icons_1 = require("../constants/field-type-icons");
const context_1 = require("../../../theme/context.js");
/**
 * TODO: 待优化，应修改为统一通过schema来获取组件类型
 * format 类型到组件类型的映射
 * 用于从列定义的 format 属性推断对应的组件类型（主要用于系统字段）
 */
const FORMAT_TO_COMPONENT_MAP = {
    user: 'CnEmployeeSelect',
    date: 'CnDatePickerPro',
    'date-time': 'CnDatePickerPro',
    lookup: 'CnLookupField',
    formula: 'CnFormulaField',
};
/**
 * 从 format 属性获取组件类型
 * @param format 列的 format 属性（如 'user', 'date' 等）
 * @returns 组件类型，如果无法映射则返回 undefined
 */
const getComponentTypeFromFormat = (format) => {
    if (!format)
        return undefined;
    return FORMAT_TO_COMPONENT_MAP[format];
};
/**
 * 统一获取字段的组件类型
 * 优先从 fieldMap中获取，如果不存在则从 format 属性获取
 * @param fieldMap 字段映射配置
 * @param columnId 列ID
 * @param format 列的 format 属性（兜底方案，用于系统字段）
 * @returns 组件类型
 */
const getFieldComponentType = (fieldMap, columnId, format) => {
    if (fieldMap && columnId) {
        const field = fieldMap[columnId];
        if (field === null || field === void 0 ? void 0 : field['x-component']) {
            return field['x-component'];
        }
    }
    return getComponentTypeFromFormat(format);
};
exports.getFieldComponentType = getFieldComponentType;
/**
 * 获取字段图标（纯函数版本，需要手动传 overrides）
 */
const getFieldIcon = (fieldType, overrides) => {
    if (!fieldType)
        return (overrides === null || overrides === void 0 ? void 0 : overrides.default) || field_type_icons_1.FIELD_TYPE_ICONS.default;
    return ((overrides === null || overrides === void 0 ? void 0 : overrides[fieldType]) ||
        field_type_icons_1.FIELD_TYPE_ICONS[fieldType] ||
        (overrides === null || overrides === void 0 ? void 0 : overrides.default) ||
        field_type_icons_1.FIELD_TYPE_ICONS.default);
};
exports.getFieldIcon = getFieldIcon;
/**
 * Hook: 返回自动集成 ConfigProvider 覆盖的 getIcon 函数。
 * 组件内部使用此 hook，无需手动传递 overrides。
 *
 * @example
 * ```tsx
 * const getIcon = useFieldIcon();
 * <img src={getIcon('CnInput')} />
 * ```
 */
function useFieldIcon() {
    const assets = (0, context_1.useBrandAssets)();
    const overrides = assets.table.fieldTypeIcons;
    return (0, react_1.useMemo)(() => (fieldType) => (0, exports.getFieldIcon)(fieldType, overrides), [overrides]);
}
