package com.fs.company.service;

import com.fs.company.domain.CompanyAiWorkflowExecLog;
import com.fs.company.vo.ExecutionResult;

import java.util.Map;

/**
 * @author MixLiu
 * @date 2026/1/28 14:21
 * @description 外呼ai工作流引擎
 */
public interface CompanyWorkflowEngine {
    /**
     * 初始化工作流
     * @param workflowDefinitionId 工作流定义ID
     * @param inputVariables 输入变量
     * @return 初始化结果
     */
    ExecutionResult initialize(Long workflowDefinitionId, Map<String, Object> inputVariables);

    /**
     * 执行指定节点
     * @param workflowInstanceId 工作流实例ID
     * @param nodeId 节点ID
     * @return 执行结果
     */
    void executeNode(String workflowInstanceId, String nodeId);

    /**
     * 暂停工作流
     * @param workflowInstanceId 工作流实例ID
     * @return 暂停结果
     */
    ExecutionResult pauseWorkflow(String workflowInstanceId);

    /**
     * 结束工作流
     * @param workflowInstanceId 工作流实例ID
     * @return 结束结果
     */
    ExecutionResult completeWorkflow(String workflowInstanceId);

    /**
     * 记录执行日志
     * @param logEntry 日志记录
     */
    void logExecution(CompanyAiWorkflowExecLog logEntry);
    /**
     * 恢复工作流
     * @param workflowInstanceId 工作流实例ID
     * @param nodeKey 节点Key
     * @param inputData 输入数据
     * @return 恢复结果
     */
    void resumeFromBlockingNode(String workflowInstanceId, String nodeKey, Map<String, Object> inputData);

    /**
     * 定时器调用节点执行
     * @param workflowInstanceId
     * @param nodeKey
     * @param inputData
     */
    void timeDoExecute(String workflowInstanceId, String nodeKey, Map<String, Object> inputData);
}
