/**
 * BookingContext 子模块：承载「预约 UI 上下文」三件套。
 *
 *  - bookingConfig：来自 `/core/board/management/config` 的整套预约配置（service_time / resource_tab /
 *    appointment_subject / subject_require / stock_setting / basic / capacity 等）。
 *  - resourcesOrigin / resourcesOriginMap：来自 `/schedule/resource/list` 的资源全集，含 times / event_list /
 *    combined_resource 等运行态信息，是 getResourceByIds / getResourceTimeIsUsable 的输入。
 *  - date：当前选择的日期（dayjs 或 ISO 字符串，迁移后内部统一存原始 ISO 字符串，UI 可自行解析）。
 *
 * 设计原则（与 BookingTicket 现状对齐）：
 *  - 默认由 `loadBookingConfig` / `loadResources` 拉取并写入 store；也支持消费方 `set*` 直接灌入（复用 ticketBooking 已拉到的数据）。
 *  - 所有读 API 返回浅克隆（数组）或原引用（map / config），避免 UI 写穿。
 */
/** `loadBookingConfig` 入参，与 ticketBooking `getBookingConfig` 一致。 */
export interface LoadBookingConfigParams {
    item_type?: string;
    sub_type?: string;
    source_type?: string;
    [key: string]: any;
}
/** `loadResources` 入参，与 info2 `getResourceList` 一致。 */
export interface LoadBookingResourcesParams {
    /** 查询日期，`YYYY-MM-DD`；缺省用 store 内已 set 的 date，再缺省为当天。 */
    date?: string;
    /** 编辑态排除容量占用用的 booking id 列表。 */
    bookingIds?: number[];
}
/** `initBookingContext` 入参（BookingTicket 聚合入口）。 */
export interface InitBookingContextParams {
    bookingConfigParams?: LoadBookingConfigParams;
    date?: BookingContextDateInput;
    /** 是否拉资源列表，默认 true。 */
    loadResources?: boolean;
    bookingIds?: number[];
    /** 为 true 时忽略内存命中，强制重新请求（默认 false）。 */
    forceRefresh?: boolean;
}
/**
 * 资源全集 map：key 为资源 id（数字），value 为资源原始对象，含 times / event_list 等运行态。
 * 这里只声明 Record 形态；具体字段保留 `any`，与 ticketBooking 现网传入的数据形状兼容。
 */
export type BookingContextResource = Record<string, any>;
export type BookingContextResourceMap = Record<string, BookingContextResource>;
/**
 * 形参 booking_config（结构来自 `/core/board/management/config` 接口）。
 * OS 不强制 schema，保留 `Record<string, any>` 兼容现网；常用路径文档化在 SDK docs。
 */
export type BookingContextConfig = Record<string, any>;
/**
 * 日期入参：接受 dayjs 实例、ISO 字符串、Date 实例；内部统一 normalize 为 ISO 字符串保存。
 */
export type BookingContextDateInput = string | Date | {
    format?: (fmt?: string) => string;
} | null | undefined;
/**
 * 内部 store 形态。`resourcesOriginMap` 由 `setResources` 派生，不允许外部直接 set。
 */
export interface BookingContextState {
    bookingConfig: BookingContextConfig | null;
    resourcesOrigin: BookingContextResource[];
    resourcesOriginMap: BookingContextResourceMap;
    /**
     * 当前选择的日期，统一 ISO 字符串（'YYYY-MM-DD HH:mm:ss' 或 'YYYY-MM-DD'）。
     * UI 取出后可自行 dayjs 解析；OS 内的计算 helper 都接受 string，不做 dayjs 依赖。
     */
    date: string | null;
}
/**
 * BookingContextModule 对外 API（给 BookingTicket / SDK Provider 透传消费）。
 */
export interface BookingContextModuleAPI {
    setBookingConfig(config: BookingContextConfig | null): void;
    getBookingConfig(): BookingContextConfig | null;
    setResources(resources: BookingContextResource[] | null | undefined): void;
    getResourcesOrigin(): BookingContextResource[];
    getResourcesOriginMap(): BookingContextResourceMap;
    setDate(date: BookingContextDateInput): void;
    getDate(): string | null;
    /** 当前 store 的浅克隆，调试 / 测试用。 */
    getState(): BookingContextState;
    /** 一键清空，destroy / 切租户场景用。 */
    clear(): void;
    /** 拉取 board config 并写入 store（`/core/board/management/config`）。 */
    loadBookingConfig(params?: LoadBookingConfigParams): Promise<BookingContextConfig | null>;
    /** 拉取资源全集并写入 store（`/schedule/resource/list`）。 */
    loadResources(params?: LoadBookingResourcesParams): Promise<BookingContextResource[]>;
    /**
     * 依次 setDate → loadBookingConfig → loadResources。
     * SalesSdkProvider 挂载时默认调用 BookingTicket.initBookingContext。
     */
    initBookingContext(params?: InitBookingContextParams): Promise<BookingContextState>;
    /** store 是否已具备与入参等价的 config / resources（无需再请求）。 */
    isBookingContextReady(params?: InitBookingContextParams): boolean;
}
/**
 * BookingContextModule 事件名常量（采用 `${this.name}:` 前缀，与现有模块一致）。
 */
export declare enum BookingContextEvent {
    OnBookingConfigChange = "onBookingConfigChange",
    OnResourcesChange = "onResourcesChange",
    OnDateChange = "onDateChange"
}
