package com.agileboot.system.config.service.impl;

import com.agileboot.common.core.exception.BizException;
import com.agileboot.common.mybatis.core.page.PageR;
import com.agileboot.system.config.dto.ConfigQuery;
import com.agileboot.system.config.dto.ConfigUpdate;
import com.agileboot.system.config.entity.SysConfig;
import com.agileboot.system.config.mapper.SysConfigMapper;
import com.agileboot.system.config.service.ISysConfigService;
import com.agileboot.system.config.vo.ConfigVO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;

/**
 * <p>
 * 参数配置表 服务实现类
 * </p>
 *
 * @author valarchie
 * @since 2022-06-09
 */
@Service
public class SysConfigServiceImpl extends ServiceImpl<SysConfigMapper, SysConfig> implements ISysConfigService {

    @Override
    public String getConfigValueByKey(String key) {
        if (StringUtils.isBlank(key)) {
            return "";
        }

        SysConfig one = this.lambdaQuery().eq(SysConfig::getConfigKey, key).one();
        if (one == null || one.getConfigValue() == null) {
            return "";
        }
        return one.getConfigValue();
    }

    @Override
    public PageR<ConfigVO> getConfigPage(ConfigQuery query) {
        Page<SysConfig> page = this.page(query.toPage(), query.toQueryWrapper());
        IPage<ConfigVO> convert = page.convert(ConfigVO::new);
        return new PageR<>(convert);
    }

    @Override
    public ConfigVO getConfigInfo(Long id) {
        return new ConfigVO(this.getById(id));
    }

    @Override
    public void updateConfig(Long id, ConfigUpdate update) {
        if (StringUtils.isBlank(update.getConfigValue())) {
            throw new BizException("");
        }
        SysConfig entity = new SysConfig();
        entity.setId(id);
        entity.setConfigValue(update.getConfigValue());
        this.updateById(entity);
    }
}
