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

package com.codvision.workflow.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.codvision.workflow.entity.WorkFlowForm;
import com.codvision.workflow.entity.vo.WorkFlowFormVO;

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

/**
 * @author hxl
 */
public interface WorkFlowFormService extends IService<WorkFlowForm> {

    /**
     * 根据流程定义ID获取表单权限列表
     * @param definitionId 流程定义ID
     * @return 列表
     */
    List<WorkFlowForm> elementFormList(String definitionId);

    /**
     * 根据流程定义ID和流程实例ID查询全部表单信息
     * @param definitionId 流程定义ID
     * @param instanceId 流程实例ID
     * @return 表单权限数据
     */
    WorkFlowFormVO getAllFormInfo(String definitionId, String instanceId);

    /**
     * 根据流程定义ID和流程实例ID查询发起表单权限信息
     * @param definitionId 流程定义ID
     * @param instanceId 流程实例ID
     * @return 表单权限数据
     */
    WorkFlowFormVO getStartFormAuth(String definitionId, String instanceId);

    /**
     * 根据流程定义ID和流程实例ID查询任务表单权限信息
     * @param definitionId 流程定义ID
     * @param elementKey 流程节点key
     * @param instanceId 流程实例ID
     * @param taskId 流程任务ID
     * @return 表单权限数据
     */
    WorkFlowFormVO getTaskFormAuth(String definitionId, String elementKey, String instanceId, String taskId);

    /**
     * 根据流程定义ID和流程节点key查询任务表单权限信息
     * @param definitionId 流程定义ID
     * @param elementKey 流程节点key
     * @return 表单权限数据
     */
    WorkFlowForm getTaskFormAuth(String definitionId, String elementKey);

    /**
     * 添加表单权限
     * @param definitionId 流程定义ID
     * @param definitionKey 流程定义Key
     * @param startElementKey 流程开始节点Key
     * @param formId 表单ID
     * @param params 表单参数
     */
    void addFormAuth(String definitionId, String definitionKey, String startElementKey, Integer formId, Map<String, Object> params);

    /**
     * 根据流程定义ID删除表单权限
     * @param definitionId 流程定义ID
     */
    void delAllByDefinitionId(String definitionId);
}
