import type { PisellReservationTableRow } from '../types';
import type { FloorRoomCardBooking, FloorRoomCardContactTier, FloorRoomCardData, FloorRoomCardHolder } from './floorRoomCardModel';
/**
 * Walk-in / 占位：`customer_id`（或 `customer.id`）为 0、1。
 * 与「是否展示 order 上 **customer 档案姓名/电话**」一致（见 {@link isRealOrderCustomer}），**不**用于 holder / contacts_info。
 */
export declare function isReservationPlaceholderCustomerId(order: Record<string, unknown> | undefined): boolean;
/**
 * 平面图/详情卡片展示金额：
 * - 已付（`paid`）：仍用 `summary.total_amount` 与原有回退链，逻辑不变。
 * - 需付：`payment_processing` 与 `unpaid` → 优先 `summary.total_amount`，否则 `amount_gap` 再顶层回退；
 *   其余需付态 → 优先 `summary.amount_gap`，否则 `total_amount` 再顶层回退。
 */
export declare function resolveBookingCardAmount(rawBooking: Record<string, unknown>, order: Record<string, unknown> | undefined, paymentStatusLower: string): string | number;
/** 与预约详情 strip 同源：顶层 products 行数优先，否则 summary.product_quantity */
export declare function resolveBookingProductQuantity(rawBooking: Record<string, unknown>): number;
/** 仅在顶层 `products[]` 存在时返回逐行数量汇总，口径与详情商品列表一致。 */
export declare function resolveBookingProductTotalQuantity(rawBooking: Record<string, unknown>): number | undefined;
/**
 * 三层联系人同时解析（holder → contacts_info → customer），与 {@link resolveFloorRoomCardHolder} 各层条件一致；
 * `customer_id` 为 0/1 时仅不拼 **customer** 层；holder、contacts_info 不受 `customer_id` 影响。
 */
export declare function resolveFloorRoomCardContactTiers(b: Record<string, unknown>): FloorRoomCardContactTier[] | undefined;
/**
 * 平面图 / 详情弹窗 / 列表联系人：与 Pisell Reservation 统一规则。
 * - **holder** / **contacts_info** 与 `customer_id` 无关；仅 **customer** 档案层在 id 为 0、1 时不采用。
 * - 顺序：**holder**（`booking.holder` → `holder_data`）→ **contact**（`order.contacts_info`）→ **customer**（`customer_name` / `order.customer`（`display_name` → `nickname` → `first_name`+`last_name`）/ `order.phone`）。
 */
export declare function resolveFloorRoomCardHolder(b: Record<string, unknown>): FloorRoomCardHolder | undefined;
/** 单条 floorMapSourceBookings → 与平面图 RoomCard 一致的 booking 模型 */
export declare function rawToBooking(b: Record<string, unknown>, index: number): FloorRoomCardBooking;
/**
 * 将合并后的桌位行转为 RoomCard 数据：优先使用 {@link PisellReservationTableRow.floorMapSourceBookings} 展示当前时刻下的多条预约时段。
 */
export declare function mapPisellReservationRowToFloorRoomCardData(row: PisellReservationTableRow, roomTitle: string): FloorRoomCardData;
/**
 * 与 `bookingDetailOrderStripFromRaw` 的 `stripBookingId` 一致：
 * `booking_id` → `id` → `order.shop_full_order_number` → `order.order_number`。
 */
export declare function resolveBookingStripIdForUi(raw: Record<string, unknown>): string;
/**
 * 详情弹窗 RoomCard 顶栏：预约标识 `booking_id` → `booking_uid` → `id`，均无则 `—`。
 */
export declare function resolveBookingIdForHeader(raw: Record<string, unknown>): string;
/**
 * 预约详情弹窗：完全基于「这一条 booking raw」（`sales.getResourceBookingItem` 返回的元素，
 * 与平面图传入的 `floorMapSourceBookings` 子项格式同源）构造 RoomCard 数据。
 *
 * 设计原则：
 * - `bookings` 始终为 `[rawToBooking(raw, 0)]`，**不**再走 `mapPisellReservationRowToFloorRoomCardData`
 *   里基于 `tableRow.cardStatus` / `floorMapSourceBookings` status 的判定，避免「completed /
 *   canceled / no_show 等非 occupied/reserved」状态导致 `bookings` 退化为空数组。
 * - `status` 严格按 `raw.status`：`occupied` → `occupied`，其余（含 `reserved` / 历史完成 /
 *   取消等）→ `reserved`，让小条始终展示，且历史记录以中性预约色呈现。
 * - `sub_status` 由 booking 自身字段（`timeoutTime` / `lateTime` / `order_payment_status`）推导，
 *   不依赖 `tableRow` 上派生过的 host 进度状态，与「完全依赖接口数据」一致。
 * - `main_field` / `capacity` 取自 `tableRow`（桌位属性，raw 不一定带）；视觉上 Modal 透传
 *   `hideHeader` / `hideHeaderCapacity`，二者主要参与数据完整性而非 header 渲染。
 */
export declare function buildDetailModalRoomCardData(raw: Record<string, unknown>, tableRow: PisellReservationTableRow | null | undefined): FloorRoomCardData;
