/**
 * 结构化的「资源不可用」原因（替代 info2 `getErrorList` 输出的 i18n 文案 + type 字段）。
 *
 * 与 info2 type 字段映射：
 *   - `no_product` ↔ type='products'
 *   - `time_out_of_range` ↔ type='time'
 *   - `count_out_of_range` ↔ type='limit'
 *   - `resource_unbound` ↔ type='unbound'
 *
 * OS 这边不耦合 i18n 文案，UI 拿到 reason + params 后自行渲染（参考 docs/SDK 中给出的 i18n key 对照表）。
 */
export type ResourceUnavailableReason = 'no_product' | 'time_out_of_range' | 'count_out_of_range' | 'resource_unbound';
export interface ResourceError {
    reason: ResourceUnavailableReason;
    params: {
        /** 资源名（time / limit 用）。 */
        labelText?: string;
        /** 起始时间（time / limit 用，格式 'hh:mm A'）。 */
        startText?: string;
        /** 结束时间（time / limit 用，格式 'hh:mm A'）。 */
        endText?: string;
        /**
         * 结束时间是否跨到第二天。UI 收到 true 时可在 endText 前加 'tomorrow' / '明天' 前缀。
         * 与 info2 旧实现「endText = locales.getText('pisell1.text.tomorrow') + endText」等价。
         */
        isCrossDay?: boolean;
    };
}
/**
 * 替代 info2 `utilsByBooking.ts#getErrorList`，输出结构化错误。
 *
 * 行为对齐：
 *   1. cacheItem 没有 id → `no_product`（与 info2 `!cacheItem?.id` 分支等价）。
 *   2. 资源 null / 无 _extend → 返回 []。
 *   3. resource.usable=false 时：
 *      - 没有 _extend.usableTime → `time_out_of_range`
 *      - 有 usableTime 但 `_extend.isCountRange=false` → `count_out_of_range`
 *   4. resource.unbound=true → 追加 `resource_unbound`。
 *   5. 不再耦合 `_data.resourceMaps[form_id].type === 'single'` 判断（与 info2 实际未使用此变量一致）。
 */
export declare function getResourceErrors(resource: any, cacheItem: any): ResourceError[];
