import {ConfigurableNodeDefinition, NodeType, NodeCategory, defineNodeOutputs} from './types';

/**
 * 网关类型枚举（与后端 GatewayTypeEnums 保持一致）
 */
export enum GatewayType {
    EXCLUSIVE = 'exclusiveGateway',  // 排他网关（XOR）- 选择唯一一条分支
    PARALLEL = 'parallelGateway',    // 并行网关（AND）- 所有分支同时执行
    INCLUSIVE = 'inclusiveGateway'   // 包容网关（OR）- 选择多条分支
}

/**
 * 网关节点定义
 * 用于流程分支控制，支持三种网关类型
 */
export const GatewayNodeDefinition: ConfigurableNodeDefinition = {
    nodeCode: "GATEWAY",
    nodeName: "网关节点",
    nodeType: NodeType.GATEWAY_NODE,
    category: NodeCategory.GATEWAY,
    description: "流程分支控制节点，支持排他、并行、包容三种模式",

    // 渲染配置
    renderConfig: {
        shape: 'diamond',  // 菱形
        size: {width: 80, height: 80},
        icon: {
            type: 'emoji',
            content: '◆',  // 默认菱形，后续根据类型动态改变
            size: 28
        },
        theme: {
            primary: '#8b5cf6',      // 紫色
            secondary: '#7c3aed',
            selectedBorder: '#3b82f6',
            hoverBorder: '#8b5cf6',
            gradient: ['#ffffff', '#ede9fe']
        },
        handles: {
            input: true,
            output: true  // 支持多个输出连线
        },
        features: {
            showBadge: true,
            showHoverMenu: true
        }
    },

    // 输入配置Schema
    inputMappingSchema: {
        type: "object",
        title: "网关配置",
        description: "配置网关类型和分支规则",
        properties: {
            gatewayType: {
                type: "string",
                title: "网关类型",
                description: "选择网关的执行模式",
                enum: ["exclusiveGateway", "parallelGateway", "inclusiveGateway"],
                enumNames: [
                    "排他网关（XOR）- 根据条件只执行一条分支", 
                    "并行网关（AND）- 所有分支同时执行", 
                    "包容网关（OR）- 根据条件执行多条分支"
                ],
                default: "exclusiveGateway"
            }
        },
        required: ["gatewayType"]
    },

    // 输出配置（网关节点只有基础输出）
    outputs: defineNodeOutputs(
        {
            name: "selectedBranches",
            title: "已选分支",
            type: "array",
            description: "实际执行的分支ID列表（排他网关返回1个，并行网关返回多个，包容网关返回1-N个）",
            example: ["branch_1", "branch_2"],
            required: true
        },
        {
            name: "gatewayType",
            title: "网关类型",
            type: "string",
            description: "当前网关的类型",
            example: "EXCLUSIVE",
            required: true
        },
        {
            name: "evaluationResults",
            title: "条件评估结果",
            type: "object",
            description: "各分支条件的评估结果（仅当启用日志时）",
            example: {
                "branch_1": true,
                "branch_2": false
            },
            required: false
        }
    )
};

/**
 * 根据网关类型获取对应的图标
 * @param gatewayType 网关类型
 * @returns emoji 图标
 */
export const getGatewayIcon = (gatewayType: GatewayType | string): string => {
    switch (gatewayType) {
        case GatewayType.EXCLUSIVE:
            return '✖️';  // X - 排他网关
        case GatewayType.PARALLEL:
            return '➕';  // + - 并行网关
        case GatewayType.INCLUSIVE:
            return '⭕';  // O - 包容网关
        default:
            return '◆';   // 默认菱形
    }
};

/**
 * 根据网关类型获取描述文本
 * @param gatewayType 网关类型
 * @returns 描述文本
 */
export const getGatewayDescription = (gatewayType: GatewayType | string): string => {
    switch (gatewayType) {
        case GatewayType.EXCLUSIVE:
            return '排他网关：根据条件选择唯一一条分支';
        case GatewayType.PARALLEL:
            return '并行网关：所有分支同时执行';
        case GatewayType.INCLUSIVE:
            return '包容网关：根据条件选择多条分支';
        default:
            return '网关节点';
    }
};

// ✅ 不再需要单独的渲染组件，使用 BaseNode 即可

