package cn.ey.biz.module.system.convert.permission;

import cn.ey.biz.common.pojo.PageResult;
import cn.ey.biz.common.util.json.JsonUtils;
import cn.ey.biz.module.system.controller.admin.permission.vo.dataRole.DataRoleCodeBlockConfigVO;
import cn.ey.biz.module.system.controller.admin.permission.vo.dataRole.DataRoleLevelConfigVO;
import cn.ey.biz.module.system.controller.admin.permission.vo.dataRole.DataRoleVO;
import cn.ey.biz.module.system.dal.dataobject.codeblock.CodeBlockDO;
import cn.ey.biz.module.system.dal.dataobject.permission.DataRoleDO;
import org.apache.commons.lang3.StringUtils;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;

import java.util.List;

@Mapper
public interface DataRoleConvert {

    DataRoleConvert INSTANCE = Mappers.getMapper(DataRoleConvert.class);

    default DataRoleDO vo2Do(DataRoleVO vo) {
        DataRoleDO doo = new DataRoleDO();
        doo.setId(vo.getId());
        doo.setMr(vo.getMr());
        doo.setSl(vo.getSl());
        doo.setName(vo.getName());
        doo.setExplain(vo.getExplain());
        doo.setApp(vo.getApp());
        doo.setType(vo.getType());
        doo.setConfigType(vo.getConfigType());
        doo.setCode(vo.getCode());
        if (null != vo.getConfig()) {
            doo.setConfig(JsonUtils.toJsonPrettyString(vo.getConfig()));
        }
        //doo.setCodeBlocks(JsonUtils.toJsonPrettyString(vo.getCodeBlocks()));
        return doo;
    }

    default DataRoleVO do2Vo(DataRoleDO doo) {
        DataRoleVO vo = new DataRoleVO();
        vo.setId(doo.getId());
        vo.setMr(doo.getMr());
        vo.setSl(doo.getSl());
        vo.setName(doo.getName());
        vo.setExplain(doo.getExplain());
        vo.setType(doo.getType());
        vo.setApp(doo.getApp());
        vo.setConfigType(doo.getConfigType());
        vo.setCode(doo.getCode());
        if (StringUtils.isNotBlank(doo.getConfig())) {
            vo.setConfig(JsonUtils.parseObject(doo.getConfig(), DataRoleLevelConfigVO.class));
        }
        return vo;
    }

    List<DataRoleVO> dos2Vos(List<DataRoleDO> dos);

    PageResult<DataRoleVO> do2VoPage(PageResult<DataRoleDO> dos);

    List<DataRoleCodeBlockConfigVO> codeBlockToVo(List<CodeBlockDO> dos);
}
