package com.tanpu.feo.feojob.service;

import com.tanpu.feo.feojob.dao.admin.entity.OrgConfig;
import com.tanpu.feo.feojob.dao.admin.entity.OrgConfigExample;
import com.tanpu.feo.feojob.dao.admin.mapper.OrgConfigMapper;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

@Service
public class OrgConfigService {

    @Resource
    private OrgConfigMapper orgConfigMapper;


    public void set(String key, Boolean value, String orgId) {
        set(key, String.valueOf(value), orgId);
    }

    public void set(String key, Integer value, String orgId) {
        set(key, String.valueOf(value), orgId);
    }

    public void set(String key, String value, String orgId) {
        OrgConfig cfg = select(key, orgId);
        if (cfg == null) {
            insert(key, value, orgId);
        } else {
            update(value, cfg.getId());
        }
    }

    public String getString(String key, String orgId) {
        OrgConfig cfg = select(key, orgId);
        return cfg == null ? null : cfg.getCfgValue();
    }

    public Integer getInt(String key, String orgId) {
        String v = getString(key, orgId);
        return v == null ? null : Integer.parseInt(v);
    }

    public Boolean getBool(String key, String orgId) {
        String v = getString(key, orgId);
        return v == null ? null : Boolean.parseBoolean(v);
    }

    public List<OrgConfig> selectByKey(String key) {
        OrgConfigExample example = new OrgConfigExample();
        example.createCriteria().andCfgKeyEqualTo(key);
        return orgConfigMapper.selectByExample(example);
    }

    private OrgConfig select(String key, String orgId) {
        OrgConfigExample example = new OrgConfigExample();
        example.createCriteria().andCfgKeyEqualTo(key).andOrgIdEqualTo(orgId);
        List<OrgConfig> ret = orgConfigMapper.selectByExample(example);
        return ret.isEmpty() ? null : ret.get(0);
    }

    private void insert(String key, String value, String orgId) {
        OrgConfig cfg = new OrgConfig();
        cfg.setCfgKey(key);
        cfg.setCfgValue(value);
        cfg.setOrgId(orgId);
        orgConfigMapper.insert(cfg);
    }

    private void update(String value, Long id) {
        OrgConfig cfg = new OrgConfig();
        cfg.setId(id);
        cfg.setCfgValue(value);
        orgConfigMapper.updateByPrimaryKey(cfg);
    }
}