package cn.fateverse.workflow.service;

import cn.fateverse.common.core.result.page.TableDataInfo;
import cn.fateverse.workflow.entity.dto.ProcessDto;
import cn.fateverse.workflow.entity.query.ProcessQuery;
import cn.fateverse.workflow.entity.vo.ProcessDefinitionHistoryVo;
import cn.fateverse.workflow.entity.vo.ProcessDefinitionInfoVo;
import cn.fateverse.workflow.entity.vo.ProcessDefinitionVo;

import java.util.List;


/**
 * @author Clay
 * @date 2022/12/23
 */
public interface ProcessDefinitionService {

    /**
     * 获取到流程部署的list
     *
     * @param query 查询条件
     * @return 结果
     */
    TableDataInfo<ProcessDefinitionVo> searchList(ProcessQuery query);

    /**
     * 查询流程部署的历史版本
     *
     * @param processDefinitionKey 流程部署关键词
     * @return 结果
     */
    List<ProcessDefinitionHistoryVo> searchHistoryList(String processDefinitionKey);

    /**
     * 通过流程部署id获取到流程详细数据(表单,流程)
     *
     * @param deploymentId 流程部署id
     * @return 结果
     */
    ProcessDefinitionInfoVo searchByDeploymentId(String deploymentId);

    /**
     * 通过processDefinitionKey 获取到当前流程的数据信息
     *
     * @param processDefinitionKey 流程部署关键词
     * @return 结果
     */
    ProcessDefinitionInfoVo searchInitiateInfoByKey(String processDefinitionKey);

    /**
     * 挂起流程部署
     *
     * @param processDefinitionId 流程部署id
     */
    void suspend(String processDefinitionId);

    /**
     * 激活流程部署
     *
     * @param processDefinitionId 流程部署id
     */
    void activate(String processDefinitionId);

    /**
     * 删除流程
     *
     * @param deploymentId 流程部署id
     */
    void delete(String deploymentId);

    /**
     * 添加流程
     *
     * @param processDto 流程数据信息
     */
    void add(ProcessDto processDto);

}
