package com.yunzhupaas.workflow.service;

import com.yunzhupaas.flowable.entity.TemplateEntity;
import com.yunzhupaas.flowable.entity.TemplateJsonEntity;
import com.yunzhupaas.flowable.model.template.FlowByFormModel;
import com.yunzhupaas.flowable.model.template.TemplateTreeListVo;
import com.yunzhupaas.model.FlowWorkListVO;
import com.yunzhupaas.permission.model.user.WorkHandoverModel;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

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

/**
 * 类的描述
 *
 * @author YUNZHUPAASYUNZHUPAAS开发组
 * @version 5.0.x
 * @since 2024/5/28 15:37
 */
public interface TemplateApi {
    /**
     * 根据表单主键获取流程
     *
     * @param formId 表单主键
     * @param start  是否仅查询开始节点关联的表单
     */
    FlowByFormModel getFlowByFormId(String formId, Boolean start);

    /**
     * 流程模板获取发起节点表单id
     * 
     * @param templateId
     * @return
     */
    String getFormByFlowId(String templateId);

    /**
     * 根据流程主键获取版本主键集合
     *
     * @param templateId 流程主键（大id）
     */
    List<String> getFlowIdsByTemplateId(String templateId);

    /**
     * 根据流程主键获取版本主键集合
     *
     * @param templateId 流程主键（大id）
     */
    List<TemplateJsonEntity> getFlowIdsByTemplate(String templateId);

    /**
     * 根据流程版本获取流程基本信息
     * 
     * @param flowId
     * @return
     */
    List<TemplateEntity> getListByFlowIds(List<String> flowId);

    /**
     * 获取流程权限
     * 
     * @return
     */
    List<TemplateTreeListVo> treeListWithPower();

    /**
     * 离职交接
     * 
     * @param fromId
     * @return
     */
    FlowWorkListVO flowWork(String fromId);

    /**
     * 离职交接
     * 
     * @param workHandoverModel
     * @return
     */
    boolean flowWork(WorkHandoverModel workHandoverModel);

    /**
     * 获取启用的流程版本的表单集合
     */
    List<String> getFormList();

    /**
     * 根据流程版本id获取流程模板id
     *
     * @param flowId 流程模板主键
     */
    String getTemplateByVersionId(@RequestParam("flowId") String flowId);

    /**
     * 获取流程templateId和表单formId组成的map
     */
    Map<String, String> getFlowFormMap();
}
