import { type MouseEvent } from 'react';
import type { FloorMapDataSources, FloorMapMergedItem } from '@pisell/materials';
import type { PisellReservationProps, PisellReservationTableRow } from '../types';
/** 与 useEngineContext 返回值形状一致（不直接 import hook），避免类型循环 */
declare type EngineContextValue = {
    appHelper?: any;
    engine?: any;
    blockContext?: any;
    components?: any;
    pageContext?: any;
};
/**
 * 只读平面图点击 → 宿主结账抽屉或内置预约详情弹窗的状态与 `floorMapItemClickBefore`；
 * 日历受控 raw 通过 `openBookingDetailFromRaw` 走同一套详情。
 */
export declare function useFloorMapBookingInteraction(options: {
    engineCtx: EngineContextValue | null | undefined;
    onFloorMapBookingClick?: PisellReservationProps['onFloorMapBookingClick'];
    dataSources: FloorMapDataSources;
    /**
     * 与 `PisellReservation` 中 `buildReservationMergedTableRows` 输出一致；推送更新后用于同步
     * 已打开的「预约详情」弹窗的 raw / 行数据。
     */
    mergedTableRows: PisellReservationTableRow[];
    /**
     * 与场控 `getPicoCodingOpenData` target 中的 BIZ 一致（如 `dine_in`）。
     * 旧店铺（id=2155）非 `dine_in` 时点击有效 booking 走宿主结账抽屉。
     */
    reservationBiz?: string;
    /** 资源选择模式：点击资源时只把资源信息回传给调用方 */
    resourceSelectMode?: PisellReservationProps['resourceSelectMode'];
    /**
     * 阅读态点击「空白卡片」时直接走宿主新建 booking 用——与详情 Modal 右上角
     * 「New」按钮 (`handleHeaderNewOrderClick`) 完全同源。dine_in 走预加载版插件
     * 需要 `reservationRuleProduct` 拼 service 项；其它业务仅靠 `reservationBiz`
     * + `associatedMenuListIds` 即可。
     */
    associatedMenuListIds?: number[];
    reservationRuleProduct?: any | null;
}): {
    bookingDetailOpen: boolean;
    bookingDetailRaw: Record<string, unknown> | null;
    bookingDetailRow: PisellReservationTableRow | null;
    bookingDetailSceneName: string | undefined;
    readModeSelectedFloorItemId: string | null;
    closeBookingDetailModal: (e?: MouseEvent<HTMLElement>) => void;
    closeBookingDetailNow: () => void;
    floorMapItemClickBefore: (args: {
        item: FloorMapMergedItem;
        mode: 'read' | 'edit';
        dataSources: FloorMapDataSources;
        event: MouseEvent<HTMLElement>;
    }) => void;
    openBookingDetailFromRaw: (payload: {
        raw: Record<string, unknown>;
        row?: PisellReservationTableRow | null;
        sceneElementName?: string;
    }) => void;
};
export {};
