import type { ISalesBooking, SalesSdkCartBookingView, SalesSdkCartItemView, SalesSdkMergedBookingSource, ScanOrderOrderProduct } from '../types';
/**
 * 生成严格合并 key；任一核心展示或写回字段不同都会拆成不同展示行。
 *
 * @example
 * buildBookingMergeKey(booking);
 */
export declare function buildBookingMergeKey(booking: SalesSdkCartBookingView): string | null;
/**
 * 计算 booking 展示数量；预约商品通常一条真实行为 1，这里保留 num 兼容。
 *
 * @example
 * resolveBookingDisplayQuantity(product);
 */
export declare function resolveBookingDisplayQuantity(product: ScanOrderOrderProduct | null | undefined): number;
/**
 * 从合并 booking 或代表商品行中取出真实来源；未合并时返回空数组。
 *
 * @example
 * getMergedBookingSources(bookingView);
 */
export declare function getMergedBookingSources(target: SalesSdkCartBookingView | SalesSdkCartItemView | null | undefined): SalesSdkMergedBookingSource[];
/**
 * 判断购物车目标是否为合并 booking 展示行。
 *
 * @example
 * isMergedBookingTarget(bookingView);
 */
export declare function isMergedBookingTarget(target: SalesSdkCartBookingView | SalesSdkCartItemView | null | undefined): boolean;
/**
 * 按严格 key 合并 booking 展示行；底层真实 booking/product 不会被修改。
 *
 * @example
 * const displayBookings = mergeBookingsForDisplay(rawBookings);
 */
export declare function mergeBookingsForDisplay(bookings: SalesSdkCartBookingView[]): SalesSdkCartBookingView[];
/**
 * 克隆新增预约真实行时清理旧 uid，避免 OS createLinkedProductAndBooking 复用原行身份。
 *
 * @example
 * const product = cloneProductForMergedBookingAppend(source.product);
 */
export declare function cloneProductForMergedBookingAppend(product: SalesSdkCartItemView): Partial<SalesSdkCartItemView>;
/**
 * 克隆新增预约真实行时清理旧 booking uid 和 product_uid。
 *
 * @example
 * const booking = cloneBookingForMergedBookingAppend(source.booking);
 */
export declare function cloneBookingForMergedBookingAppend(booking: ISalesBooking): ISalesBooking;
