import {BaseResponse, BaseQuery} from '@/types/base';

/**
 * 工作流定义状态
 */
export type WorkflowDefinitionStatus = 'DRAFT' | 'PUBLISHED' | 'DISABLED';

/**
 * 工作流定义响应
 */
export interface WorkflowDefinition extends BaseResponse {
    name: string;
    key: string;
    categoryId?: number;  // 分类ID
    category?: WorkflowCategoryResponse | null;  // 分类对象（后端返回）
    formDefinitionId?: number;  // 启动表单ID
    formDefinitionName?: string | null;  // 启动表单名称（后端返回）
    processDefinitionId?: string;  // 流程定义ID
    flowVersion: number;  // 流程版本
    bpmnXml?: string;  // BPMN XML内容
    graph?: WorkflowDefinitionGraph;  // 流程图数据
    status: WorkflowDefinitionStatus;  // 流程状态
    description?: string;  // 流程描述
}

/**
 * 工作流定义图数据
 */
export interface WorkflowDefinitionGraph {
    nodes: WorkflowDefinitionNode[];
    edges: WorkflowDefinitionEdge[];
}

/**
 * 工作流定义边（后端实际返回的格式）
 */
export interface WorkflowDefinitionEdge {
    id: string;
    from: string;              // 后端使用 from 字段作为源节点ID
    to: string;                // 后端使用 to 字段作为目标节点ID
    name?: string;             // 边的显示名称
    config?: {                 // 边的配置信息
        type?: string;         // 边类型（如 sequence）
        condition?: {          // 条件配置
            type: 'EXPRESSION' | 'DEFAULT';
            expression?: string;
            priority: number;
        };
    };
    vertices?: Array<{ x: number; y: number }>;  // 边的拐点坐标
}

export interface WorkflowDefinitionNode {
    id: number | string;          // 支持数字或UUID字符串
    nodeCode: string;
    nodeType: string;
    nodeName: string;
    position?: { x: number; y: number };  // 节点位置
    configs?: Record<string, any>;        // 基本配置
    inputMapping?: Record<string, any>;   // 输入映射
    outputs?: Array<{                     // 输出能力定义
        name: string;
        title: string;
        type: 'string' | 'number' | 'boolean' | 'object' | 'array';  // 与 OutputField 保持一致
        description: string;
        enum?: string[];
        example?: any;
        required?: boolean;
    }>;
}

/**
 * 工作流定义查询参数
 */
export interface WorkflowDefinitionQuery extends BaseQuery {
    name?: string;
    key?: string;
    categoryId?: number;  // 分类ID筛选
    status?: WorkflowDefinitionStatus;
}

/**
 * 工作流定义创建/更新请求
 */
export interface WorkflowDefinitionRequest {
    name: string;
    key: string;
    categoryId?: number;
    formDefinitionId?: number;
    flowVersion?: number;  // 流程版本（新建时传1，更新时传当前版本）
    description?: string;
    graph?: WorkflowDefinitionGraph;
    bpmnXml?: string;
    status?: WorkflowDefinitionStatus;
    version?: number;  // 乐观锁版本号（更新时必传）
}

/**
 * 工作流分类响应
 */
export interface WorkflowCategoryResponse {
    id: number;
    name: string;
    code: string;
    description?: string;
    icon?: string;
    sort: number;
    supportedTriggers?: string[];  // 触发方式代码列表，如 ["MANUAL","SCHEDULED"]
    enabled: boolean;
    createBy?: string;
    createTime?: string;
    updateBy?: string;
    updateTime?: string;
}

/**
 * 工作流分类查询参数
 */
export interface WorkflowCategoryQuery extends BaseQuery {
    name?: string;
    code?: string;
    enabled?: boolean;
}

/**
 * 工作流分类创建/更新请求
 */
export interface WorkflowCategoryRequest {
    name: string;
    code: string;
    description?: string;
    icon?: string;
    sort?: number;
    supportedTriggers?: string[];
    enabled?: boolean;
}

/**
 * 启动工作流实例请求
 */
export interface StartWorkflowInstanceRequest {
    /** 流程定义key */
    processKey: string;
    
    /** 业务标识（可选，默认自动生成） */
    businessKey?: string;
    
    /** 表单标识 */
    formKey?: string;
    
    /** 表单数据 */
    formData?: Record<string, any>;
}

/**
 * 启动工作流实例响应
 */
export interface StartWorkflowInstanceResponse {
    /** 流程实例ID */
    instanceId: string;
    
    /** 流程定义ID */
    processDefinitionId: string;
    
    /** 业务标识 */
    businessKey: string;
    
    /** 流程定义key */
    processKey: string;
    
    /** 启动时间 */
    startTime?: string;
}
