package cn.pluss.platform.dict;

import cn.pluss.platform.entity.Dict;
import cn.pluss.platform.mapper.DictMapper;
import cn.pluss.platform.util.tree.TreeUtils;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.ArrayList;
import java.util.List;

public interface DictService extends IService<Dict> {

    /**
     * 通过字典code查询所有子项
     * @return 字典列表
     */
    default List<Dict> getByCode(List<String> codeList) {
        if (codeList == null || codeList.size() == 0) {
            return new ArrayList<>();
        }

        return ((DictMapper)getBaseMapper()).getDictByCode(codeList);
    }

    /**
     * 通过字典code和其他信息查询对应的字典项
     * @param code  父级编码
     * @param dict  字典项对象，其中包含部分查询条件
     * @return  字典项
     */
    default Dict getByCode(String code, Dict dict) {
        Dict parent = new Dict().setCode(code);
        parent = getOne(new QueryWrapper<>(parent));

        dict.setPId(parent.getId());
        return getOne(new QueryWrapper<>(dict));
    }

    /**
     * 获取树形结构
     * @return
     */
    default List<Dict> tree() {
        List<Dict> list = list();
        for (Dict dict : list) {
            dict.setTitle(dict.getName());
        }

        return TreeUtils.getSortTree(list);
    }

    /**
     * 获取一个字典组中的最大序号
     * @param code  字典编码
     * @return  ignored
     */
    default Dict getMaxSortElem(String code) {
        return ((DictMapper) getBaseMapper()).selectMaxSortElem(code);
    }
}