package com.xhpc.system.service.impl;

import com.xhpc.common.core.exception.CustomException;
import com.xhpc.common.core.utils.StringUtils;
import com.xhpc.system.domain.XhpcTenantDomain;
import com.xhpc.system.mapper.XhpcTenantMapper;
import com.xhpc.system.service.XhpcTenantService;
import org.springframework.stereotype.Service;

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


@Service
public class XhpcTenantServiceImpl implements XhpcTenantService {


    @Resource
    XhpcTenantMapper tenantMapper;


    @Override
    public List<XhpcTenantDomain> getPage(Map<String, Object> params){
        return tenantMapper.getList(params);
    }


    @Override
    public List<Map<String, Object>> getNameList(String tenantId){
        return tenantMapper.getNameList(tenantId);
    }

    @Override
    public XhpcTenantDomain getInfoByPk(String tenantId){
        return tenantMapper.selectByPrimaryKey(tenantId);
    }


    @Override
    public boolean insertTenant(XhpcTenantDomain domain){
        if(StringUtils.isEmpty(domain.getTenantName())
                || StringUtils.isEmpty(domain.getTenantId())
                || StringUtils.isEmpty(domain.getLinkman())
                || StringUtils.isEmpty(domain.getContactNumber())){
            throw new CustomException("必填字段为空");
        }

        XhpcTenantDomain tenantDomain = tenantMapper.selectByPkOrName(domain.getTenantId(), domain.getTenantName());
        if(tenantDomain != null){
            throw new CustomException("租户ID或名称已存在");
        }

        return tenantMapper.insertSelective(domain) > 0;
    }


    @Override
    public boolean updateTenantInfo(XhpcTenantDomain domain){
        return tenantMapper.updateInfoByPrimaryKey(domain) > 0;
    }


    @Override
    public boolean updateTenantStatus(XhpcTenantDomain domain){
        return tenantMapper.updateStatusByPrimaryKey(domain) > 0;
    }


    @Override
    public boolean updateTenantConfig(XhpcTenantDomain domain){
        if(domain.getTenantIds() != null &&  domain.getTenantIds().size() > 0){
            for (String tenantId : domain.getTenantIds()){
                domain.setTenantId(tenantId);
                tenantMapper.updateTenantConfigByPrimaryKey(domain);
            }
        } else {
            tenantMapper.updateTenantConfigByPrimaryKey(domain);
        }
        return true;
    }


    @Override
    public boolean deleteByPk(String tenantId){
        XhpcTenantDomain tenantDomain = tenantMapper.selectByPrimaryKey(tenantId);
        if(tenantDomain == null){
            throw new CustomException("该租户不存在");
        }
        // todo 检查租户是否存在异常订单、用户余额等
        // todo 暂不实现业务流程，待讨论后再实现

        return false;
    }
}
