package com.hotwj.platform.flow.strategy;

import com.hotwj.platform.flow.domain.SysFlowInstance;
import com.hotwj.platform.flow.domain.dto.FlowNextDto;

/**
 * 流程策略接口 (定义流程流转逻辑)
 *
 * @author shihongwei
 * @date 2026-01-25
 */
public interface IFlowStrategy {

    /**
     * 获取流程编码
     *
     * @return 流程编码
     */
    String getFlowCode();

    /**
     * 获取流程名称
     *
     * @return 流程名称
     */
    String getFlowName();

    /**
     * 获取下一节点信息
     *
     * @param instance    流程实例
     * @param currentNodeCode 当前节点编码
     * @return 下一节点信息 (返回 null 表示流程结束)
     */
    FlowNextDto next(SysFlowInstance instance, String currentNodeCode);

    /**
     * 获取驳回节点信息
     *
     * @param instance    流程实例
     * @param currentNodeCode 当前节点编码
     * @return 驳回节点信息 (返回 null 表示默认处理：终止流程)
     */
    default FlowNextDto reject(SysFlowInstance instance, String currentNodeCode) {
        return null;
    }

    /**
     * 获取初始节点信息
     *
     * @param businessId 业务ID
     * @return 初始节点信息
     */
    default FlowNextDto getInitialNode(String businessId) {
        return new FlowNextDto("NODE_1", "一级审批", null);
    }
}
