import type { CSSProperties, Key, ReactNode } from 'react';
/** 排序子项（如 从低到高 / 从高到低），用于 getSortItems 返回值 */
export interface SortOptionItemCompat {
    key: string;
    label: string;
}
/** 排序列表项：type 由 Sort 内置生成子项；getSortItems 则完全自定义子项，与 RecordBoard Sort 约定一致 */
export interface SortListItemCompat {
    name?: string | string[];
    label?: string;
    /** 排序类型，有 getSortItems 时可省略 */
    type?: 'date' | 'string' | 'number' | 'option';
    isCustom?: boolean;
    columnKey?: string;
    localFilter?: boolean;
    isHidden?: boolean;
    /** 自定义排序子项，优先于 type */
    getSortItems?: (fieldKey: string) => SortOptionItemCompat[];
}
/** 筛选列表项：与 RecordBoard / PisellFilter 使用的 FilterItemProps 形状兼容 */
export interface FilterItemPropsCompat {
    type: 'single' | 'input' | 'datePicker' | 'rangePicker' | 'rangePickerNew' | 'search' | 'custom';
    key: string;
    name?: string | string[];
    label?: string;
    props?: Record<string, any>;
    other?: Record<string, any>;
    isCustom?: boolean;
    columnKey?: string;
    isHidden?: boolean;
}
/** 筛选默认值：quickFilter / otherFilter 为筛项列表，values 为表单值 */
export interface FilterDefaultValueCompat {
    quickFilter?: FilterItemPropsCompat[];
    otherFilter?: FilterItemPropsCompat[];
    values?: Record<string, any>;
}
/** ToolBar 内筛选配置：defaultFilterValue 提供筛项与初始值 */
export interface RecordBoardToolBarFilterCompat {
    hiddenQuickFilter?: boolean;
    hiddenOtherFilter?: boolean;
    defaultFilterValue?: FilterDefaultValueCompat;
    [key: string]: any;
}
/** ToolBar 内排序配置：list 为排序项数组 */
export interface RecordBoardToolBarSortCompat {
    list?: SortListItemCompat[];
    placement?: 'bottom' | 'bottomLeft' | 'bottomRight' | 'top' | 'topLeft' | 'topRight';
    [key: string]: any;
}
/** ToolBar 内快速筛选配置：filterList 覆盖列派生的快筛列表 */
export interface RecordBoardToolBarQuickFilterCompat {
    filterList?: FilterItemPropsCompat[];
    formFiltersPrefix?: string;
    size?: 'small' | 'middle' | 'large';
    [key: string]: any;
}
/** ToolBar 透传配置：与 RecordBoardToolBarProps 对齐，供 perspective.childComponentProps.toolBar 使用 */
export interface RecordBoardToolBarPropsCompat {
    className?: string;
    style?: CSSProperties;
    tabs?: ReactNode;
    topLeft?: ReactNode;
    topRight?: ReactNode;
    bottomLeft?: ReactNode;
    bottomRight?: ReactNode;
    /** 搜索：true 默认 PisellFind；对象透传 props；false 不渲染 */
    search?: boolean | Record<string, any>;
    /** 筛选：true 默认 PisellFilter；对象可传 defaultFilterValue 等；false 不渲染 */
    filter?: boolean | RecordBoardToolBarFilterCompat;
    /** 排序：true 默认由列派生；对象可传 list、placement；false 不渲染 */
    sort?: boolean | RecordBoardToolBarSortCompat;
    /** 快速筛选：true 用列派生；对象可传 filterList 等 */
    quickFilter?: boolean | RecordBoardToolBarQuickFilterCompat;
    /** 列设置入口；默认 true */
    columnSetting?: boolean;
}
/** Grid 透传配置：与 RecordBoardGridProps 对齐，多选由 SalesGrid 合并后传入 */
export interface RecordBoardGridPropsCompat {
    /** 列配置；列上可设 hidden: true 表示默认隐藏，与 defaultHiddenColumnKeys 合并由 RecordBoard 初始化列显隐 */
    columns?: any[];
    /** 默认隐藏的列 key 列表（对应 columns 的 key 或 dataIndex），与列上 hidden: true 合并后由 RecordBoard 初始化列显隐 */
    defaultHiddenColumnKeys?: string[];
    /** 当前页某列全同值/全空时隐藏该列并在表格上方展示总结区；默认 true，传 false 可关闭 */
    collapseUniformColumns?: boolean;
    /** 表格滚动，与 RecordBoard grid.scroll 对齐（含 autoCalc、scrollToFirstRowOnChange） */
    scroll?: {
        x?: number | string;
        y?: number | string;
        autoCalc?: boolean;
        scrollToFirstRowOnChange?: boolean;
    };
    /** 表格尺寸 */
    size?: 'small' | 'middle' | 'default';
    /** 其余为 antd Table 透传（onRow、onHeaderRow、expandable、rowClassName、summary 等） */
    [key: string]: any;
}
/** 与 RecordBoard 打散子组件配置兼容；grid 会与多选（selectedKeys/selectedRows/onSelectionChange）合并后传给 RecordBoard */
export interface RecordBoardChildComponentPropsCompat {
    /** 搜索配置，透传 PisellFind */
    search?: Record<string, any>;
    /** 工具栏配置：sort / filter / quickFilter 等 */
    toolBar?: RecordBoardToolBarPropsCompat;
    /** 分页组件透传配置 */
    pagination?: Record<string, any>;
    /** Grid 配置：columns、defaultHiddenColumnKeys、scroll、及 Table 透传 */
    grid?: RecordBoardGridPropsCompat;
    /** 卡片列表配置（card 布局时） */
    cardList?: Record<string, any>;
    /** 批量操作栏配置 */
    batchActionBar?: Record<string, any>;
    /**
     * 平面图：与 PisellRecordBoard.floorMap 对齐，透传 PisellFloorMapLayout；
     * 有值时工具栏出现「表格 / 平面图」切换。
     */
    floorMap?: Record<string, any>;
    /** 有 floorMap 时首屏默认子视图；PisellReservation 组件内默认为 floorMap */
    defaultBodyView?: 'grid' | 'floorMap';
}
/**
 * 列渲染覆盖项：当视角的 grid.columns 中某列的 type 与此 type 一致时，使用此 render 替代该列默认渲染再传给 RecordBoard。
 */
export interface SalesGridColumnRenderer {
    /** 与列配置的 type 匹配（如 'currency'、'singleSelect'） */
    type: string;
    /** 自定义列单元格渲染 */
    render: (value: any, record: any, index: number) => ReactNode;
}
/**
 * Perspective 运行时上下文：由 PisellSalesGrid 在运行时构建，
 * 传入 perspective 的 getChildComponentProps 工厂函数，
 * 使 columns / onRow / toolBar 等配置可访问刷新列表等运行时能力。
 */
export interface SalesGridRuntimeContext {
    /** 重新请求当前列表数据（同步触发） */
    refresh: () => void;
    /** 重新请求当前列表数据（返回 Promise） */
    refreshAsync: () => Promise<any>;
    /** 当前激活的 perspective key */
    currentPerspective: string;
}
/**
 * 单个 Perspective 配置：对应一套 RecordBoard（表格 + 可选工具栏内平面图）。
 * 支持两种配置方式（二选一）：
 * 1. **静态配置** — 直接提供 childComponentProps。
 * 2. **工厂配置** — 提供 getChildComponentProps(ctx)。
 * 平面图：在 childComponentProps 中传 `floorMap`、`defaultBodyView`，由 RecordBoard 工具栏切换。
 */
export interface SalesGridPerspectiveConfig {
    /** Perspective 唯一标识，与 currentPerspective 对应 */
    key: string;
    /** Perspective 展示名称（可选，供外部展示用） */
    label?: string;
    /** 该 Perspective 下 RecordBoard 子组件透传配置 */
    childComponentProps?: RecordBoardChildComponentPropsCompat;
    /**
     * 工厂函数：接收运行时上下文，返回 RecordBoard 透传配置。
     * 存在时忽略 childComponentProps。
     */
    getChildComponentProps?: (ctx: SalesGridRuntimeContext) => RecordBoardChildComponentPropsCompat;
}
export interface PisellSalesGridProps {
    /** Perspective 数据：一组 RecordBoard 配置，支持配置多个 Perspective */
    perspectives: SalesGridPerspectiveConfig[];
    /** 当前 Perspective：对应 perspectives[].key，决定使用哪个 Perspective 的配置渲染 RecordBoard */
    currentPerspective: string;
    /** 自定义类名 */
    className?: string;
    /** 自定义样式 */
    style?: CSSProperties;
    extParams?: Record<string, any>;
    /** 实例 id，透传 RecordBoard 用于列显隐持久化（localStorage，与 @pisell/utils getComponentStorageKey 规则一致） */
    __id?: string;
    /** 受控数据：传入时表格视角使用此处数据，不请求 getOrderList/getBookingList（用于 Story、静态数据等） */
    data?: any[];
    loading?: boolean;
    total?: number;
    pagination?: {
        pageNumber: number;
        pageSize: number;
    };
    onPageChange?: (pageNumber: number, pageSize: number) => void;
    searchParams?: Record<string, any>;
    onSearch?: (params: Record<string, any>) => void;
    onReset?: () => void;
    selectedKeys?: React.Key[];
    selectedRows?: any[];
    onSelectionChange?: (keys: React.Key[], rows: any[]) => void;
    rowKey?: string | ((record: any) => Key);
    /** 受控时由父组件提供，供 perspective 的 getChildComponentProps 中 ctx.refresh 使用 */
    onRefresh?: () => void;
    refreshAsync?: () => Promise<any>;
    /** 按列 type 覆盖单元格渲染；与内置合并，同 type 时传入的覆盖内置 */
    columnRenderers?: SalesGridColumnRenderer[];
}
/** Story / 演示用的数据源相关 props 组合（与 PisellSalesGrid 列表态常用字段一致） */
export declare type SalesGridDataSourceProps = Pick<PisellSalesGridProps, 'data' | 'loading' | 'total' | 'pagination' | 'onPageChange' | 'searchParams' | 'onSearch' | 'onReset' | 'selectedKeys' | 'selectedRows' | 'onSelectionChange' | 'rowKey'>;
