import type { BimTreeNode } from './tree-node';

/**
 * 节点勾选状态枚举
 */
export enum TreeNodeCheckState {
    Unchecked = 0,
    Checked = 1,
    Indeterminate = 2 // 半选
}

/**
 * 节点点击行为类型
 */
export type NodeClickAction = 'select' | 'expand';

/**
 * 树节点配置接口
 */
export interface TreeNodeConfig {
    /** 唯一标识符 */
    id: string;

    /** 显示文本的翻译键 */
    label: string;

    /** 节点图标 (SVG string 或 URL) */
    icon?: string;

    /** 子节点列表 */
    children?: TreeNodeConfig[];

    /** 初始展开状态 (默认 false) */
    expanded?: boolean;

    /** 初始选中状态 (默认 false) */
    checked?: boolean;

    /** 是否禁用 (默认 false) */
    disabled?: boolean;

    /** 自定义业务数据 */
    data?: any;

    /** 是否是叶子节点 (用于异步加载场景，暂留接口) */
    isLeaf?: boolean;

    /** 点击整行的行为 (默认 'select') */
    clickAction?: NodeClickAction;
}

/**
 * 树组件配置选项
 */
export interface TreeOptions {
    /** 树的数据源 */
    data: TreeNodeConfig[];

    /** 是否显示复选框 (默认 true) */
    checkable?: boolean;

    /** 
     * 父子节点选中状态是否关联 (默认 true)
     * true: 选中父选子，子全选自动选父
     * false: 独立选中
     */
    checkStrictly?: boolean;

    /** 默认展开所有节点 (默认 false) */
    defaultExpandAll?: boolean;

    /** 缩进宽度 (像素，默认 24) */
    indent?: number;

    /** 是否启用搜索功能 (默认 false) */
    enableSearch?: boolean;

    /** 搜索框占位符 */
    searchPlaceholder?: string;

    /** 节点勾选回调 */
    onNodeCheck?: (node: BimTreeNode) => void;

    /** 节点选择回调 */
    onNodeSelect?: (node: BimTreeNode) => void;

    /** 节点展开/折叠回调 */
    onNodeExpand?: (node: BimTreeNode) => void;

    /** 
     * 选中时显示的自定义操作栏渲染函数 
     * 返回 HTML 字符串或 HTMLElement
     */
    renderActions?: (node: TreeNodeConfig) => HTMLElement | string;
}