package com.ruoyi.workflow.service;

import java.util.List;
import java.util.Map;

import com.ruoyi.workflow.domain.WorkflowDefinition;
import com.ruoyi.workflow.domain.WorkflowInstance;

/**
 * 工作流引擎Service接口
 * 
 * @author ruoyi
 * @date 2025-12-19
 */
public interface IWorkflowEngineService 
{
    /**
     * 启动工作流实例
     * 
     * @param definitionId 工作流定义ID
     * @param businessKey 业务键
     * @param variables 流程变量
     * @return 工作流实例
     */
    public WorkflowInstance startWorkflow(Long definitionId, String businessKey, Map<String, Object> variables);

    /**
     * 执行任务
     * 
     * @param instanceId 实例ID
     * @param taskId 任务ID
     * @param action 执行动作
     * @param variables 任务变量
     * @return 执行结果
     */
    public Map<String, Object> executeTask(Long instanceId, String taskId, String action, Map<String, Object> variables);

    /**
     * 审批任务
     * 
     * @param instanceId 实例ID
     * @param taskId 任务ID
     * @param approverId 审批人ID
     * @param decision 审批决定(APPROVE/REJECT)
     * @param comments 审批意见
     * @return 审批结果
     */
    public Map<String, Object> approveTask(Long instanceId, String taskId, Long approverId, String decision, String comments);

    /**
     * 获取工作流实例状态
     * 
     * @param instanceId 实例ID
     * @return 实例状态信息
     */
    public Map<String, Object> getWorkflowStatus(Long instanceId);

    /**
     * 回滚工作流到指定步骤
     * 
     * @param instanceId 实例ID
     * @param targetStep 目标步骤
     * @return 回滚结果
     */
    public Map<String, Object> rollbackWorkflow(Long instanceId, String targetStep);

    /**
     * 定义工作流模板
     * 
     * @param templateInfo 模板信息
     * @return 工作流定义
     */
    public WorkflowDefinition defineWorkflowTemplate(Map<String, Object> templateInfo);

    /**
     * 分配任务
     * 
     * @param taskId 任务ID
     * @param assigneeId 被分配人ID
     * @return 分配结果
     */
    public Map<String, Object> assignTask(String taskId, Long assigneeId);

    /**
     * 任务升级
     * 
     * @param taskId 任务ID
     * @param escalationRule 升级规则
     * @return 升级结果
     */
    public Map<String, Object> escalateTask(String taskId, Map<String, Object> escalationRule);

    /**
     * 查询用户待办任务
     * 
     * @param userId 用户ID
     * @return 待办任务列表
     */
    public List<Map<String, Object>> getUserTasks(Long userId);

    /**
     * 查询工作流实例历史
     * 
     * @param instanceId 实例ID
     * @return 历史记录
     */
    public List<Map<String, Object>> getWorkflowHistory(Long instanceId);

    /**
     * 暂停工作流实例
     * 
     * @param instanceId 实例ID
     * @return 操作结果
     */
    public Map<String, Object> suspendWorkflow(Long instanceId);

    /**
     * 恢复工作流实例
     * 
     * @param instanceId 实例ID
     * @return 操作结果
     */
    public Map<String, Object> resumeWorkflow(Long instanceId);

    /**
     * 终止工作流实例
     * 
     * @param instanceId 实例ID
     * @param reason 终止原因
     * @return 操作结果
     */
    public Map<String, Object> terminateWorkflow(Long instanceId, String reason);

    /**
     * 获取工作流定义列表
     * 
     * @return 工作流定义列表
     */
    public List<WorkflowDefinition> getWorkflowDefinitions();

    /**
     * 部署工作流定义
     * 
     * @param definition 工作流定义
     * @return 部署结果
     */
    public Map<String, Object> deployWorkflowDefinition(WorkflowDefinition definition);

    /**
     * 获取工作流统计信息
     * 
     * @param params 查询参数
     * @return 统计信息
     */
    public Map<String, Object> getWorkflowStatistics(Map<String, Object> params);
}