import { BuiltinComponentType } from '../../constants';
import { TextRun } from '../../view/runs/TextRun';
import { LayoutNodeForComponent } from '../../view/types/layout-node-by-component';
import { LayoutContext } from '../LayoutContext';
import { WrText } from '../../model/document';
export type HandlerContext = {
    context: LayoutContext;
    wr: WrText;
};
export type LineType = 'paragraph' | 'tablerow' | undefined;
export interface BuildCtx {
    currentPageId: string;
    area: 'body' | 'header' | 'footer' | 'overlay';
    lineId?: string;
    lineIndex: number;
    lineType?: LineType;
    tableId?: string;
    tableRowId?: string;
    tableRowIndex?: number;
    tableCellId?: string;
    tableCellIndex?: number;
    /** 内部使用：当前表格行计数 */
    __rowCounter: number;
    /** 内部使用：当前表格行内 cell 计数 */
    __cellCounter: number;
}
/** 记录一行的基础信息 */
export interface LineInfo {
    /** 节点 id */
    id: string;
    type: 'tablerow' | 'paragraph';
    /** 纸张 id */
    pageId: string;
    /** 所属区域 */
    pageArea: 'body' | 'header' | 'footer' | 'overlay';
    /** 排序 */
    sort: number;
    nextIds: string[];
    size: Array<{
        /** 布局后的文字的绝对位置 - 左边 */
        left: number;
        /** 布局后的文字的绝对位置 - 上边 */
        top: number;
        /** 布局后的文字的绝对位置 - 右边 */
        right: number;
        /** 布局后的文字的绝对位置 - 下边 */
        bottom: number;
        /** 当前行的绝对位置 - 上边 */
        lineTop: number;
        /** 当前行的绝对位置 - 下边 */
        lineBottom: number;
    }>;
}
export interface Bounds {
    left: number;
    top: number;
    right: number;
    bottom: number;
}
export type TableSelectionMode = 'none' | 'mixed' | 'row-range' | 'cell-range' | 'cell-full' | 'cell-inner';
/**
 * 布局元数据公共字段（不含 `component` / `raw`）。
 *
 * **重要**：画布上的节点是 `LayoutNode` 子类实例，**没有** `raw` 属性。
 * 仅在本结构的 `raw`（见 {@link BaseMetaNode}）上挂对应画布节点；不要用 `run.raw`。
 */
export interface BaseMetaNodeBase {
    /** 节点 id */
    id: string;
    /** 章节引用 id */
    secRefId: string;
    /** 纸张 id */
    pageId: string;
    /** 所属区域 */
    pageArea: 'body' | 'header' | 'footer' | 'overlay';
    /** 上级节点 id */
    preId: string;
    /** 宽度 */
    width: number;
    /** 高度 */
    height: number;
    /** 布局后的绝对位置 */
    absbox: {
        /** 布局后的绝对位置 - 左边 */
        left: number;
        /** 布局后的绝对位置 - 上边 */
        top: number;
        /** 布局后的绝对位置 - 右边 */
        right: number;
        /** 布局后的绝对位置 - 下边 */
        bottom: number;
    };
    /** 布局后的在父容器中的相对位置 */
    relbox: {
        /** 布局后的在父容器中的相对位置 - 左边 */
        left: number;
        /** 布局后的在父容器中的相对位置 - 上边 */
        top: number;
        /** 布局后的在父容器中的相对位置 - 右边 */
        right: number;
        /** 布局后的在父容器中的相对位置 - 下边 */
        bottom: number;
    };
    /** 组件字符长度 */
    charLength: number;
    /** 组件在全局文档的开始位置 */
    globalPosStart: number;
    /** 组件在全局文档的结束位置 */
    globalPosEnd: number;
    /** 路径 id 链路 */
    path: string[];
    /** 路径下标链路 */
    pathIndex: number[];
    /** 线性索引 */
    runIndex: number;
    /** 行信息 */
    line?: {
        /** 行类型 */
        lineType: LineType;
        /** 段落 id / 表格行 id  */
        lineId?: string;
        /** 行下标, 在 page 内第几行 */
        lineIndex?: number;
        /** 如果在表格内，表格 id */
        tableId?: string | undefined;
        tableRowId?: string | undefined;
        tableRowIndex?: number | undefined;
        tableCellId?: string | undefined;
        tableCellIndex?: number | undefined;
    };
    charMetrics?: TextRun['charMetrics'];
    charOffsets?: number[] | undefined;
    text?: string;
    lineTop?: number;
    lineBottom?: number;
}
/**
 * 布局元数据：与 `component` 判别联合，`raw` 类型随 `component` 收窄（见 {@link LayoutNodeForComponent}）。
 */
export type BaseMetaNode = {
    [C in BuiltinComponentType]: BaseMetaNodeBase & {
        component: C;
        raw?: LayoutNodeForComponent<C>;
    };
}[BuiltinComponentType];
