package ink.wgink.login.base.service.config.impl;


import ink.wgink.common.base.DefaultBaseService;
import ink.wgink.login.base.dao.config.IConfigDao;
import ink.wgink.login.base.manager.ConfigManager;
import ink.wgink.login.base.pojo.dtos.config.ConfigDTO;
import ink.wgink.login.base.pojo.vos.config.ConfigVO;
import ink.wgink.login.base.service.config.IConfigService;
import ink.wgink.util.map.HashMapUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * When you feel like quitting. Think about why you started
 * 当你想要放弃的时候，想想当初你为何开始
 *
 * @ClassName: ConfigServiceImpl
 * @Description: 系统配置
 * @Author: WangGeng
 * @Date: 2019/11/20 10:32
 * @Version: 1.0
 **/
@Service
public class ConfigServiceImpl extends DefaultBaseService implements IConfigService {

    @Autowired
    private IConfigDao configDao;

    @Override
    public void updateConfig(ConfigVO configVO) throws Exception {
        Map<String, Object> params = HashMapUtil.beanToMap(configVO);
        Map<String, Object> configParams = new HashMap<>(params.size());
        for (Map.Entry<String, Object> kvs : params.entrySet()) {
            configParams.clear();
            configParams.put(ConfigManager.CONFIG_KEY, kvs.getKey());
            configParams.put(ConfigManager.CONFIG_VALUE, kvs.getValue());
            ConfigDTO configDTO = configDao.get(kvs.getKey());
            if (configDTO == null) {
                configDao.save(configParams);
            } else {
                configDao.update(configParams);
            }
        }
        ConfigManager.getInstance().refreshConfig();
    }

    @Override
    public void updateConfig(String key, Object value) {
        if (StringUtils.isBlank(key)) {
            return;
        }
        if (value == null) {
            return;
        }
        Map<String, Object> configParams = new HashMap<>(2);
        configParams.put(ConfigManager.CONFIG_KEY, key);
        configParams.put(ConfigManager.CONFIG_VALUE, value);
        ConfigDTO configDTO = configDao.get(key);
        if (configDTO == null) {
            configDao.save(configParams);
        } else {
            configDao.update(configParams);
        }
        ConfigManager.getInstance().refreshConfig();
    }

    @Override
    public Map<String, Object> getConfig() {
        List<ConfigDTO> configDTOs = configDao.list();
        Map<String, Object> result = new HashMap<>(configDTOs.size());
        for (ConfigDTO configDTO : configDTOs) {
            result.put(configDTO.getConfigKey(), configDTO.getConfigValue());
        }
        return result;
    }
}
