package com.njcn.bpm.service;


import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.njcn.bpm.pojo.param.BpmCategoryParam;
import com.njcn.bpm.pojo.po.BpmCategory;
import com.njcn.bpm.pojo.vo.BpmCategoryVO;

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

import static com.njcn.bpm.utils.CollectionUtils.convertMap;


/**
 * BPM 流程分类 Service 接口
 *
 */
public interface IBpmCategoryService extends IService<BpmCategory> {

    /**
     * 创建流程分类
     *
     * @return 编号
     */
    String createCategory( BpmCategoryParam bpmCategoryParam);

    /**
     * 更新流程分类
     *
     */
    void updateCategory( BpmCategoryParam.BpmCategoryUpdateParam updateParam);

    /**
     * 删除流程分类
     */
    void deleteCategory(List<String> ids);


    /**
     * 获得流程分类分页
     *
     * @return 流程分类分页
     */
    Page<BpmCategoryVO> getCategoryPage(BpmCategoryParam.BpmCategoryQueryParam bpmCategoryQueryParam);

    /**
     * 获得流程分类 Map，基于指定编码
     *
     * @param ids 编号数组
     * @return 流程分类 Map
     */
    default Map<String, BpmCategory> getCategoryMap(Collection<String> ids) {
        return convertMap(getCategoryListById(ids), BpmCategory::getId);
    }

    /**
     * 获得流程分类列表，基于指定编码
     *
     * @return 流程分类列表
     */
    List<BpmCategory> getCategoryListById(Collection<String> codes);



    List<BpmCategory> getCategoryList();
}