/**
 * 平面图绑定桌 RoomCard 数据结构（对齐 demo/card mock，供展示与 getCardType）
 */
export declare type FloorRoomCardHolder = {
    name: string;
    phone?: string;
};
/** 联系人三层数据源（holder → contacts_info → customer），解析顺序与短路规则同源，但可同时存在多条供合并展示 */
export declare type FloorRoomCardContactTierSource = 'holder' | 'contacts_info' | 'customer';
export declare type FloorRoomCardContactTier = {
    source: FloorRoomCardContactTierSource;
    name: string;
    phone?: string;
};
/** 宿主单条 booking.status，用于多条列表时区分占用/预留肤（与行级聚合 status 解耦） */
export declare type FloorRoomCardHostBookingStatus = 'reserved' | 'occupied' | 'locked' | 'empty';
export declare type FloorRoomCardBooking = {
    booking_id: string;
    /**
     * 宿主 `floorMapSourceBookings` 行 `id`；同一订单多时段时多条可共用 `booking_id`，
     * 点击命中与 DOM 需用此行级 id 区分。
     */
    recordId?: string;
    start_date: string;
    start_time: string;
    end_date: string;
    end_time: string;
    number: number;
    holder?: FloorRoomCardHolder;
    /**
     * 三层联系人同时存在时全部参与图元展示（用 ` · ` 拼接，单层内不换行）；无则回退仅用 {@link holder}。
     * `customer_id` 为 0/1 时仅不出现 **customer** 层；holder、contacts_info 不受 id 影响。
     */
    contactTiers?: FloorRoomCardContactTier[];
    amount: string | number;
    /** 来自宿主 `booking.status`（小写）；多条 occupied 时参与 multi_occupied，纯预留多条则排序后主卡+Next */
    hostBookingStatus?: FloorRoomCardHostBookingStatus;
    /** 宿主：迟到时长（分钟）；有值才展示「迟到 +Xm」，前端不按开始时间推算 */
    lateTime?: number;
    /** 宿主：超时时长（分钟）；有值才展示「+Xm」，前端不按结束时间推算 */
    timeoutTime?: number;
    /** 宿主：进行中进度 0–100（100 为满条），优先于起止时间推算 */
    progressPercent?: number;
    /**
     * 宿主：距预约开始剩余分钟（`remainingReserveTime`），预留 not_arrived 时用于「还有 n 分钟」展示，优先于本地起止时间推算
     */
    remainingReserveTime?: number;
    /**
     * 宿主订单支付状态（来源：接口 `booking.order.payment_status` 等，映射到模型）。
     * - `paid`：已付（绿）
     * - 其它（含宿主曾返回的 `partially_paid`）：按需付款展示（红）；映射层应写入 `unpaid`
     * - 未设：按需付款展示
     */
    order_payment_status?: string;
    /**
     * 订单商品项数：`products` 有效行数优先，否则 `order.summary.product_quantity`；无则 0。
     */
    product_quantity?: number;
    /**
     * 订单商品总件数：仅当 `products[]` 可用时按各行 `product_quantity` 汇总；无则不写入，避免把项数误当总件数。
     */
    product_total_quantity?: number;
    /**
     * 仅详情弹窗使用：把订单总价等额外汇总信息拼到商品汇总行末尾。
     */
    items_summary_suffix?: string;
    /**
     * 仅详情弹窗使用：展示在 RoomCard 正文顶部的订单号，来源于 `order.shop_full_order_number`。
     */
    order_display_number?: string;
    /** 接口 `is_next` / `isNext`：为 true 时仅展示在 Next 行，不参与主档/多条约预览主列表 */
    isNext?: boolean;
};
export declare type FloorRoomCardRoomStatus = 'empty' | 'reserved' | 'occupied' | 'locked';
/** 细分态：与 demo `CARD_CLASS` / `getCardType` 一致 */
export declare type FloorRoomCardSubStatus = 'not_arrived' | 'late' | 'payed' | 'payment_required' | 'timeout' | '';
export declare type FloorRoomCardData = {
    main_field: string;
    capacity: number | string;
    status: FloorRoomCardRoomStatus;
    sub_status: FloorRoomCardSubStatus;
    bookings: FloorRoomCardBooking[];
    /**
     * 「当前订单总数」展示位（接口直出 `bookingCount`）：>0 时在卡片标题旁以
     * `(N/M)` 形态展示分母 M；上层（如平面图）单独透传，**不写入 `main_field`**，
     * 避免标题被裁剪时把计数一起截没。null / undefined / ≤0 时整体不渲染。
     */
    bookingCount?: number;
    /**
     * 「已完成订单数」展示位（接口 `compeleteBookingCount` → 内部 `completeBookingCount`）：`(N/M)` 分子 N。
     * 缺失按 0 渲染；仅在 `bookingCount > 0` 时与分母联动展示，避免空态卡出现 `(0/0)`。
     */
    completeBookingCount?: number;
};
