package cn.fateverse.workflow.service;

import cn.fateverse.common.core.entity.Option;
import cn.fateverse.workflow.entity.dto.ProcessListenerDto;
import cn.fateverse.workflow.entity.vo.ProcessListenerVo;
import cn.fateverse.workflow.entity.query.ProcessListenerQuery;
import cn.fateverse.common.core.result.page.TableDataInfo;

import java.util.List;

/**
 * 系统内置监听器 Service
 *
 * @author clay
 * @date 2023-03-27
 */
public interface ProcessListenerService {

    /**
     * 查询系统内置监听器
     *
     * @param id 系统内置监听器Id
     * @return 系统内置监听器
     */
    ProcessListenerVo searchById(String id);

    /**
     * 查询系统内置监听器列表
     *
     * @param query 系统内置监听器
     * @return 系统内置监听器集合
     */
    TableDataInfo<ProcessListenerVo> searchList(ProcessListenerQuery query);


    /**
     * 查询系统内置监听器option
     *
     * @param type 监听器类型
     * @return 选项列表
     */
    List<Option> searchOptionList(String type);

    /**
     * 导出系统内置监听器列表
     *
     * @param query query 系统内置监听器
     * @return 系统内置监听器集合
     */
    List<ProcessListenerVo> exportList(ProcessListenerQuery query);

    /**
     * 新增系统内置监听器
     *
     * @param processListener 系统内置监听器
     * @return 结果
     */
    int save(ProcessListenerDto processListener);

    /**
     * 修改系统内置监听器
     *
     * @param processListener 系统内置监听器
     * @return 结果
     */
    int edit(ProcessListenerDto processListener);

    /**
     * 删除系统内置监听器
     *
     * @param id 需要删除的系统内置监听器Id
     * @return 结果
     */
    int removeById(String id);

    /**
     * 批量删除系统内置监听器
     *
     * @param idList 需要删除的系统内置监听器Id 集合
     * @return 结果
     */
    int removeBatch(List<String> idList);
}