package com.simuwang.manage.service.impl.system;

import com.simuwang.base.common.conts.UserConstants;
import com.simuwang.base.common.exception.ServiceException;
import com.simuwang.base.common.support.MybatisPage;
import com.simuwang.base.common.text.Convert;
import com.simuwang.base.common.util.DateUtils;
import com.simuwang.base.common.util.StringUtil;
import com.simuwang.base.mapper.system.SysConfigMapper;
import com.simuwang.base.pojo.dos.SysConfigDO;
import com.simuwang.base.pojo.dto.query.ConfigPageQuery;
import com.simuwang.base.pojo.vo.SysConfigVO;
import com.simuwang.manage.service.system.SysConfigService;
import com.simuwang.shiro.utils.UserUtils;
import com.smppw.common.pojo.ResultVo;
import com.smppw.common.pojo.enums.status.ResultCode;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;

/**
 * FileName: SysConfigServiceImpl
 * Author:   chenjianhua
 * Date:     2024/9/8 11:01
 * Description: ${DESCRIPTION}
 */
@Service
public class SysConfigServiceImpl implements SysConfigService {
    @Autowired
    private SysConfigMapper sysConfigMapper;

    @Override
    public boolean checkConfigKeyUnique(SysConfigVO config) {
        Long configId = StringUtil.isNull(config.getConfigId()) ? -1L : config.getConfigId();
        SysConfigDO info = sysConfigMapper.checkConfigKeyUnique(config.getConfigKey());
        if (StringUtil.isNotNull(info) && info.getConfigId().longValue() != configId.longValue())
        {
            return UserConstants.NOT_UNIQUE;
        }
        return UserConstants.UNIQUE;
    }

    @Override
    public MybatisPage<SysConfigVO> searchConfigList(ConfigPageQuery query) {
        List<SysConfigDO> sysConfigDOList = sysConfigMapper.selectConfigList(query);
        List<SysConfigVO> sysConfigVOList = sysConfigDOList.stream().map(SysConfigDO::toVO).collect(Collectors.toList());
        long total = sysConfigMapper.countConfigList(query);
        return MybatisPage.of(total,sysConfigVOList);
    }

    @Override
    public void deleteConfigList(List<Integer> configIdList) {
        Integer userId = UserUtils.getLoginUser().getUserId();
        sysConfigMapper.deleteConfigByIds(configIdList,userId);
    }

    @Override
    public SysConfigVO searchConfigById(Integer configId) {
        SysConfigDO SysConfigVO = sysConfigMapper.selectConfigById(configId);
        return SysConfigVO.toVO();
    }

    @Override
    public ResultVo saveConfig(SysConfigVO sysConfigVO) {
        Integer userId = UserUtils.getLoginUser().getUserId();
        ResultVo vo = new ResultVo(ResultCode.SAVE_SUCCESS);
        vo.setData(true);
        if(!checkConfigKeyUnique(sysConfigVO)){
            vo.setMsg("已存在相同的参数配置信息，无须重复添加");
            vo.setData(false);
            return vo;
        }
        SysConfigDO sysConfigDO = new SysConfigDO();
        sysConfigDO.setConfigId(sysConfigVO.getConfigId());
        sysConfigDO.setConfigValue(sysConfigVO.getConfigValue());
        sysConfigDO.setConfigName(sysConfigVO.getConfigName());
        sysConfigDO.setConfigKey(sysConfigVO.getConfigKey());
        sysConfigDO.setIsvalid(1);
        sysConfigDO.setConfigType(sysConfigVO.getConfigType());
        sysConfigDO.setRemark(sysConfigVO.getRemark());
        sysConfigDO.setUpdaterId(userId);
        sysConfigDO.setUpdateTime(DateUtils.getNowDate());
        if(sysConfigVO.getConfigId() == null){
            sysConfigDO.setCreatorId(userId);
            sysConfigDO.setCreateTime(DateUtils.getNowDate());
            sysConfigMapper.insertConfig(sysConfigDO);
        }else{
            sysConfigMapper.updateConfig(sysConfigDO);
        }
        return vo;
    }

}
