package cn.axzo.workflow.core.service;


import cn.axzo.workflow.common.model.request.category.CategoryCreateDTO;
import cn.axzo.workflow.common.model.request.category.CategorySearchDTO;
import cn.axzo.workflow.common.model.request.category.CategoryUpdateDTO;
import cn.axzo.workflow.common.model.response.BpmPageResult;
import cn.axzo.workflow.common.model.response.category.CategoryItemVO;

import java.util.List;
import java.util.Optional;


public interface CategoryService {

    Optional<CategoryItemVO> getById(Long id);
    /**
     * 获取指定分类
     *
     * @param type
     * @param value
     * @return
     */
    Optional<CategoryItemVO> get(String type, String value);
    /**
     * 创建
     *
     * @param createDTO {@link #createCategory(CategoryCreateDTO)}
     * @return insert record count
     */
    CategoryItemVO createCategory(CategoryCreateDTO createDTO);

    /**
     * 修改
     *
     * @param updateDTO {@link #updateCategory(CategoryUpdateDTO)}
     * @return update record count
     */
    CategoryItemVO updateCategory(CategoryUpdateDTO updateDTO);

    /**
     * 删除
     *
     * @param id {@link #deleteCategory(Long)}
     * @return this row primary key
     */
    int deleteCategory(Long id);

    /**
     * 变更状态
     *
     * @param id
     * @param state
     * @return
     */
    Boolean updateState(Long id, Boolean state);

    /**
     * 列表
     *
     * @return
     */
    List<CategoryItemVO> list(CategorySearchDTO dto);

    /**
     * 查询指定类型和指定标签的数据
     *
     * @param type
     * @param values
     * @return
     */
    List<CategoryItemVO> listByValue(String type, List<String> values);

    /**
     * 分页搜索
     *
     * @param dto
     * @return
     */
    BpmPageResult<CategoryItemVO> search(CategorySearchDTO dto);

    /**
     * 获取指定的 ID
     *
     * @param id
     * @return
     */
    CategoryItemVO get(Long id);

    List<CategoryItemVO> getIds(List<Long> ids);

    List<CategoryItemVO> getByValues(List<String> values);

    Boolean updateRemark(Long id, String configType);

    Boolean checkCategoryStatus(Long tenantId, String categoryCode);


}
