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.text.Convert;
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.vo.SysConfigVO;
import com.simuwang.manage.service.system.SysConfigService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;

/**
 * FileName: SysConfigServiceImpl
 * Author:   chenjianhua
 * Date:     2024/9/8 11:01
 * Description: ${DESCRIPTION}
 */
@Service
public class SysConfigServiceImpl implements SysConfigService {
    @Autowired
    private SysConfigMapper sysConfigMapper;
    @Override
    public List<SysConfigDO> selectConfigList(SysConfigVO config) {
        return sysConfigMapper.selectConfigList(config);
    }

    @Override
    public int insertConfig(SysConfigVO config) {
        return 0;
    }

    @Override
    public SysConfigDO selectConfigById(Long configId) {
        SysConfigDO sysConfigDO = sysConfigMapper.selectConfigById(configId);
        return sysConfigDO;
    }

    @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 void deleteConfigByIds(String ids) {
        Long[] configIds = Convert.toLongArray(ids);
        for (Long configId : configIds)
        {
            SysConfigDO config = selectConfigById(configId);
            if (StringUtil.equals(UserConstants.YES, config.getConfigType()))
            {
                throw new ServiceException(String.format("内置参数【%1$s】不能删除 ", config.getConfigKey()));
            }
            sysConfigMapper.deleteConfigById(configId);
        }
    }

    @Override
    public int updateConfig(SysConfigVO config) {
        SysConfigDO temp = sysConfigMapper.selectConfigById(config.getConfigId());
        temp.setUpdateTime(new Date());
        temp.setConfigKey(config.getConfigKey());
        temp.setConfigType(config.getConfigType());
        temp.setConfigValue(config.getConfigValue());
        temp.setConfigName(config.getConfigName());
        return sysConfigMapper.updateConfig(temp);
    }

    @Override
    public String getKey(String configKey) {
        SysConfigVO config = new SysConfigVO();
        config.setConfigKey(configKey);
        SysConfigDO retConfig = sysConfigMapper.selectConfig(config);
        if (StringUtil.isNotNull(retConfig))
        {
            return retConfig.getConfigValue();
        }
        return StringUtil.EMPTY;
    }
}
