/**
 * @file NormalTableView 组件类型定义
 * @description 普通表格视图相关的类型定义
 */
import { ColumnDef, Table } from '../../../../../../cn-ai-table/table-core';
import { RowSelectionProps } from './row';
import { AiFieldConfig, SaveMode } from '../../../toolbar/components/add-field';
/**
 * 自定义行渲染函数类型
 * @description 用于在数据行之间插入自定义行（如分组头部行、空白行等）
 * @param virtualRow - 虚拟滚动项，包含 index、size、start、end 等信息
 * @param index - 行索引
 * @param rows - 所有行数据
 * @returns React 节点或 null
 */
export type CustomRowRenderer = (virtualRow: any, index: number, rows: any[]) => React.ReactNode | null;
/**
 * 自定义行项目类型
 * @description 用于 customRows 数组中的每个项目
 */
export interface CustomRowItem {
    /** 行类型：data-数据行，custom-自定义行 */
    type: 'data' | 'custom';
    /** 数据行对象（TanStack Table 的 Row） */
    row?: any;
    /** 自定义行数据 */
    data?: any;
    /** 分组内的序号（从1开始），用于分组视图中每组序号重新计数 */
    groupRowIndex?: number;
    /** 是否是分组中的最后一行（用于分组表格圆角效果） */
    isLastInGroup?: boolean;
}
/**
 * 操作列配置接口
 * @description 配置右侧固定的操作列
 */
export interface OperateColumnConfig {
    /** 操作列宽度 */
    width?: number;
    /** 操作按钮配置 */
    buttons?: any[];
    /** 显示的按钮数量，超出部分收起到更多菜单 */
    showButtonNum?: number;
    /** 自定义渲染函数 */
    render?: (val: any, record: any, index: number) => React.ReactNode;
    /** 按钮分隔符 */
    split?: React.ReactNode;
    /** 分隔符宽度 */
    splitWidth?: number;
    /** 更多按钮属性 */
    moreBtnProps?: Record<string, any>;
    /** 锁定位置 */
    lock?: boolean | 'left' | 'right';
}
/**
 * NormalTableView 组件属性接口
 * @description 普通表格视图的配置属性
 */
export interface NormalTableViewProps {
    /** 视图ID，用于获取和更新视图配置 */
    viewId: string;
    /** TanStack Table 实例 */
    table: Table<any>;
    /** 列定义数组 */
    columns: Array<ColumnDef<any>>;
    /** 视图列元数据 */
    viewColumnMetaData: any;
    /** 行高配置：low(32px) / medium(48px) / high(64px) */
    rowHeight?: 'low' | 'medium' | 'high';
    /** 是否显示序号列 */
    showIndex?: boolean;
    /** 行选择配置（由 useSelect 处理后传入） */
    rowSelectionProps?: RowSelectionProps;
    /** 最终渲染列宽映射（自动列宽 + 持久化列宽合并后结果） */
    widthMap?: Record<string, number>;
    /** 操作列配置 */
    operateColumn?: OperateColumnConfig;
    /**
     * 自定义行渲染函数
     * @description 用于在数据行之间插入自定义行（如分组头部）
     */
    customRowRenderer?: CustomRowRenderer;
    /**
     * 自定义行列表
     * @description 用于覆盖默认的 rows（支持插入分组头部等自定义行）
     */
    customRows?: CustomRowItem[];
    /**
     * 自定义行拖拽结束回调
     * @description 用于跨组拖拽等场景，如果提供则覆盖默认的排序逻辑
     */
    onRowDragEnd?: (activeId: string | number, overId: string | number) => void;
    /** 显示筛选面板回调 */
    onShowFilterPanel?: () => void;
    /** 显示排序面板回调 */
    onShowSortPanel?: () => void;
    /** 显示分组面板回调 */
    onShowGroupPanel?: () => void;
    /** 显示颜色填充面板回调 */
    onShowColorFillPanel?: () => void;
    /** 智能跟单需要关注的行 ID 列表（needAttention: true 的行，增量累积） */
    smartFollowNeedAttentionRowIds?: string[];
    /**
     * 最大分组层级数，用于列头菜单中判断是否允许继续添加分组
     * @default 1
     */
    maxGroupLevels?: number;
    /** 为 false 时关闭 AI 列编辑、单元格 AI 操作与相关请求 */
    enableAiFields?: boolean;
}
/**
 * 正在编辑的 AI 列配置信息
 * @description 由 handleEditAiColumn -> onOpenEditPanel 回调生成，全链路复用此类型
 */
export interface EditingAiColumn {
    /** 列 ID（dataIndex） */
    columnId: string;
    /** AI 列编码 */
    columnCode: string;
    /** 列显示名称 */
    columnName: string;
    /** prompt 模板（用于回显） */
    promptTemplate: string;
    /** AI 字段类型，如 'generate-text' */
    fieldType?: string;
    /** 完整的 AI 配置信息 */
    aiConfig?: Record<string, unknown>;
}
/**
 * 正在编辑的公式列配置信息
 */
export interface EditingFormulaColumn {
    /** 列 ID（dataIndex） */
    columnId: string;
    /** 列编码 */
    columnCode: string;
    /** 列显示名称 */
    columnName: string;
    /** 公式表达式（用于回显） */
    expression: string;
    /** 引用的字段列表 */
    referencedFields: string[];
}
/**
 * 公式字段配置面板弹窗组件属性
 */
export interface FormulaFieldConfigPanelPopupProps {
    /** 弹窗是否可见 */
    visible: boolean;
    /** 弹窗可见性变化回调 */
    onVisibleChange: (visible: boolean) => void;
    /** 表头元素引用，用于弹窗定位 */
    headerRef: React.RefObject<HTMLTableCellElement>;
    /** 编辑的公式列 */
    editingFormulaColumn: EditingFormulaColumn;
    /** 保存公式字段配置 */
    handleEditFormulaConfigSave: (config: import('../../../../toolbar/components/add-field/formula-field').FormulaFieldConfig) => void;
    /** 取消公式字段配置 */
    handleEditFormulaConfigCancel: () => void;
}
/**
 * AI字段配置面板弹窗组件属性
 */
export interface AiFieldConfigPanelPopupProps {
    /** 弹窗是否可见 */
    visible: boolean;
    /** 弹窗可见性变化回调 */
    onVisibleChange: (visible: boolean) => void;
    /** 表头元素引用，用于弹窗定位 */
    headerRef: React.RefObject<HTMLTableCellElement>;
    /** 编辑的AI列 */
    editingAiColumn: EditingAiColumn;
    /** 正在保存的AI列 */
    savingAiColumn: boolean;
    /** 正在执行的AI列任务 */
    executingColumnTask: boolean;
    /** 保存AI列配置 */
    handleEditAiConfigSave: (config: AiFieldConfig, type: SaveMode) => void;
    /** 取消AI列配置 */
    handleEditAiConfigCancel: () => void;
}
