/*
 * Copyright (c) 2023 codvision.com All Rights Reserved.
 */

package com.codvision.workflow.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.codvision.webcore.bean.QueryPage;
import com.codvision.workflow.entity.WorkFlowDefinition;
import com.codvision.workflow.entity.dto.WorkFlowDefinitionDTO;
import com.codvision.workflow.entity.vo.WorkFlowElementVO;

import java.io.InputStream;
import java.util.List;
import java.util.Map;

/**
 * @author hxl
 */
public interface WorkFlowDefinitionService {

    /**
     * 分页列表
     * @param queryPage 查询条件
     * @return 列表
     */
    IPage<WorkFlowDefinition> getPageResult(QueryPage<Map<String, Object>> queryPage);

    /**
     * 添加流程定义
     * @param definitionDTO 流程定义
     * @param in 流
     */
    void save(WorkFlowDefinitionDTO definitionDTO, InputStream in);

    /**
     * 激活或挂起流程定义
     * @param state 状态
     * @param deployId 流程部署ID
     */
    void activeOrSuspend(Integer state, String deployId);

    /**
     * 删除流程定义
     * @param deployIds 流程部署ID
     */
    void delete(List<String> deployIds);

    /**
     * 获取流程定义xml
     * @param deployId 流程部署ID
     * @return xml
     */
    String getXml(String deployId);

    /**
     * 获取流程定义图片
     * @param deployId 流程部署ID
     * @return 图片
     */
    InputStream getImage(String deployId);

    /**
     * 根据流程定义xml获取所有可回退的节点
     * @param xmlStr 流程定义xml
     * @param currentTaskKey 当前任务节点key
     * @return 图片
     */
    List<WorkFlowElementVO> getReturnTaskList(String xmlStr, String currentTaskKey);
}
