/**
 * Terminal 组件类型定义
 * 支持 SSH、K8s Pod 等多种终端场景
 */

export type TerminalType = 'ssh' | 'k8s-pod' | 'docker-container';

export type ConnectionStatus = 'connecting' | 'connected' | 'reconnecting' | 'disconnected' | 'error';

/**
 * ========================================
 * 分屏相关类型
 * ========================================
 */

export type SplitDirection = 'up' | 'down' | 'left' | 'right';
export type LayoutOrientation = 'horizontal' | 'vertical';

/**
 * 终端标签页
 */
export interface TerminalTab {
    id: string;
    title: string;
    serverId: string | number;
    serverName: string;
    isActive: boolean;
}

/**
 * 编辑器组（叶子节点）
 * 包含多个终端标签页
 */
export interface EditorGroup {
    type: 'group';
    id: string;
    tabs: TerminalTab[];
    activeTabId: string;
    size: number; // 在父容器中的占比 (0-100)
}

/**
 * 分屏容器（内部节点）
 * 可以包含编辑器组或其他容器，实现嵌套布局
 */
export interface SplitContainer {
    type: 'container';
    id: string;
    orientation: LayoutOrientation;
    children: SplitNode[];
    size: number; // 在父容器中的占比 (0-100)
}

/**
 * 分屏节点（容器或组）
 */
export type SplitNode = SplitContainer | EditorGroup;

/**
 * 根布局
 */
export interface SplitLayout {
    root: SplitNode;
}

/**
 * 分屏操作类型
 */
export type SplitAction = 
    | { type: 'SPLIT_UP' }
    | { type: 'SPLIT_DOWN' }
    | { type: 'SPLIT_LEFT' }
    | { type: 'SPLIT_RIGHT' }
    | { type: 'SPLIT_IN_GROUP' }
    | { type: 'MOVE_UP' }
    | { type: 'MOVE_DOWN' }
    | { type: 'MOVE_LEFT' }
    | { type: 'MOVE_RIGHT' }
    | { type: 'CLOSE_TAB'; payload: { tabId: string } }
    | { type: 'CLOSE_GROUP'; payload: { groupId: string } }
    | { type: 'SWITCH_TAB'; payload: { tabId: string } }
    | { type: 'ADD_TAB'; payload: { groupId: string; tab: TerminalTab } };

/**
 * ========================================
 * Terminal 消息相关类型
 * ========================================
 */

/**
 * WebSocket 消息格式 - 接收
 */
export interface TerminalReceiveMessage {
    type: 'output' | 'status' | 'error';
    data: string | { response: { type: string; data: string } };
    timestamp?: number;
    metadata?: Record<string, any> | null;
}

/**
 * WebSocket 消息格式 - 发送
 */
export interface TerminalSendMessage {
    type: 'input' | 'resize';
    data: {
        request: {
            type: 'input' | 'resize';
            command?: string;
            rows?: number;
            cols?: number;
        };
    };
}

/**
 * Terminal 连接配置
 */
export interface TerminalConnectionConfig {
    /** 连接类型 */
    type: TerminalType;
    /** 服务器ID（仅SSH需要） */
    serverId?: string | number;
    /** 服务器名称 */
    serverName?: string;
    /** 服务器IP地址 */
    hostIp?: string;
    /** 认证token */
    token?: string;
    /** 连接超时时间（毫秒） */
    timeout?: number;
    /** 是否自动重连 */
    autoReconnect?: boolean;
    /** 重连间隔（毫秒） */
    reconnectInterval?: number;
    /** 最大重连次数 */
    maxReconnectAttempts?: number;
}

/**
 * Terminal 显示配置
 */
export interface TerminalDisplayConfig {
    /** 字体大小 */
    fontSize?: number;
    /** 字体系列 */
    fontFamily?: string;
    /** 行数 */
    rows?: number;
    /** 列数 */
    cols?: number;
    /** 滚动缓冲区大小 */
    scrollback?: number;
    /** 光标闪烁 */
    cursorBlink?: boolean;
    /** 主题配置 */
    theme?: {
        background?: string;
        foreground?: string;
        cursor?: string;
        [key: string]: string | undefined;
    };
}

/**
 * Terminal 审计配置
 */
export interface TerminalAuditConfig {
    /** 是否启用审计 */
    enabled: boolean;
    /** 审计提示信息 */
    message?: string;
    /** 公司名称 */
    companyName?: string;
}

/**
 * Terminal 工具栏配置
 */
export interface TerminalToolbarConfig {
    /** 是否显示工具栏 */
    show?: boolean;
    /** 是否显示搜索按钮 */
    showSearch?: boolean;
    /** 是否显示清屏按钮 */
    showClear?: boolean;
    /** 是否显示复制按钮 */
    showCopy?: boolean;
    /** 是否显示字体缩放按钮 */
    showFontSize?: boolean;
    /** 是否显示状态徽章 */
    showStatus?: boolean;
    /** 是否显示字体大小 */
    showFontSizeLabel?: boolean;
    /** 自定义额外操作 */
    extraActions?: React.ReactNode;
    /** 分屏操作 - 向上拆分 */
    onSplitUp?: () => void;
    /** 分屏操作 - 向下拆分 */
    onSplitDown?: () => void;
    /** 分屏操作 - 向左拆分 */
    onSplitLeft?: () => void;
    /** 分屏操作 - 向右拆分 */
    onSplitRight?: () => void;
    /** 分屏操作 - 在组中拆分 */
    onSplitInGroup?: () => void;
}

/**
 * Terminal 组件 Props
 */
export interface TerminalProps {
    /** 唯一标识符 */
    id: string;
    /** 连接配置 */
    connection: TerminalConnectionConfig;
    /** 显示配置 */
    display?: TerminalDisplayConfig;
    /** 审计配置 */
    audit?: TerminalAuditConfig;
    /** 工具栏配置 */
    toolbar?: TerminalToolbarConfig;
    /** 是否为激活状态（用于Tab切换时重新focus） */
    isActive?: boolean;
    /** 紧凑模式（多分屏时自动启用） */
    compact?: boolean;
    /** 连接状态变化回调 */
    onStatusChange?: (status: ConnectionStatus) => void;
    /** 关闭就绪回调 */
    onCloseReady?: () => void;
    /** 错误回调 */
    onError?: (error: string) => void;
    /** 分屏回调 */
    onSplitUp?: () => void;
    onSplitDown?: () => void;
    onSplitLeft?: () => void;
    onSplitRight?: () => void;
    onSplitInGroup?: () => void;
}
