import { getSumCapacity } from './resources';
import { TimeSlicesResult, TimeSlice, DurationSlice } from './timeSlices';
/**
 * 上下文（与 info2 state.bookingConfig / state.service / state.date 一一对应）。
 *
 * 设计原则：所有助手函数都通过 context 显式拿数据，**不读 mini-redux**，
 * 让 OS 这层完全可在 Node 单测下运行（dayjs 在 Node 也是纯函数）。
 */
export interface BookingCalcContext {
    /** 来自 `/core/board/management/config` 的整套配置；常用路径见 sliceTimeSlices / appointmentTimingPreference。 */
    bookingConfig?: any;
    /** 资源 origin map（id → resource origin）。 */
    resourcesOriginMap?: Record<string, any>;
    /** 资源全集列表（display_scope=all 时用）。 */
    resourcesOrigin?: any[];
    /** 当前选择的日期（dayjs 或 string）。 */
    date?: any;
    /** 上一个服务行（getServiceStartTimeAndEndTime 拼接续接 start_time 用）。可缺省。 */
    previousService?: any;
    /** 日历选中的资源 id（替代 info2 sessionStorage.serviceParams.resource_id）。 */
    resourceIdFromCalendar?: number;
    /** 资源自动分派开关（替代 info2 localStorage 'resource-auto-allocation'）；默认全开。 */
    isAutoAllocationOn?: (formId: any) => boolean;
    /** 当前预设开始时间（替代 info2 sessionStorage.serviceParams.start_date 取 HH:mm）。 */
    presetStartTime?: string;
    /** 店铺打烊时间（替代 info2 localStorage shopOpeningHours），默认 23:59。 */
    shopOpeningHours?: string;
}
/** 从 BookingContext.date 提取 HH:mm（仅当日期带有效时分时）。 */
export declare function derivePresetStartTimeFromDate(date: any): string | undefined;
/**
 * 时间切片对象（含灵活时长选项）。与 info2 `getTimeObj` 等价。
 */
export declare function getTimeObj(params: {
    cacheItem: any;
    useStartTime?: string;
    useDuration?: number | string;
    ctx: BookingCalcContext;
}): TimeSlicesResult & {
    timeSlices: TimeSlice[];
    durationSlicesBasedOnTime: DurationSlice[];
};
/**
 * 计算商品行 _extend（包含 start_time / endDate / duration / start_date / end_date / sub_type 等）。
 * 与 info2 `utilsByBooking.ts#getServiceStartTimeAndEndTime` 等价；显著差异：
 *   - 不读 `state.service.value` / `mini-redux`，由 ctx.previousService 显式注入。
 *   - 不读 `sessionStorage.serviceParams`，由 ctx.presetStartTime / ctx.resourceIdFromCalendar 注入。
 *   - cacheItem.isCustomItem → 直接返回 `{ duration: null }`。
 */
export declare function getServiceStartTimeAndEndTime(params: {
    cacheItem: any;
    timeObj: TimeSlicesResult;
    ctx: BookingCalcContext;
}): any;
/**
 * 综合：把 cacheItem 拼装出完整的 _extend / _data（资源 / 容量 / timeObj），并标记 autoClose。
 * 与 info2 `service/addService/utils.tsx#getProductExtend` 等价；剥 React `console.time` / JSX。
 *
 * 入参 ctx 必须至少给：bookingConfig / resourcesOriginMap / resourcesOrigin / date。
 */
export declare function getProductExtend(params: {
    cacheItem: any;
    ctx: BookingCalcContext;
    isDisabledTime?: boolean;
}): any;
/**
 * 是否可自动关闭弹窗（不需要用户进 EditService 抽屉）。
 * 与 info2 `service/addService/utils.tsx#getIsAutoClose` 等价；
 * `getAutoAllocationStorage` 抽象为入参 `isAutoAllocationOn(formId)`。
 */
export declare function getIsAutoClose(cacheItem: any, isAutoAllocationOn: (formId: any) => boolean): boolean;
export { getSumCapacity };
