package com.xisc.pm.app.service.strategy.pdrule;

import java.util.Map;

import org.apache.commons.lang3.StringUtils;
import org.hzero.core.base.BaseConstants;
import org.springframework.stereotype.Component;

import com.xisc.pm.api.dto.RuleParamDTO;
import com.xisc.pm.app.service.strategy.RuleExecStrategyFactory;
import com.xisc.pm.domain.entity.PmProContProdTtr;
import com.xisc.pm.infra.constant.RuleSetConstants;
import com.xisc.pm.infra.enums.PdRuleItemType;

import io.choerodon.core.exception.CommonException;

/**
 * 一张大板上只能有一个奉送样合同，且仅有这个合同（包括轴合同和非轴合同）匹配检查（P01）
 * 
 * 
 */
@Component
public class GiveSampleCountRuleExecStrategy implements RuleExecStrategy {

    @Override
    public void afterPropertiesSet() throws Exception {
        RuleExecStrategyFactory.register(PdRuleItemType.GIVE_SAMPLE_COUNT_MATCH, this);
    }

    @Override
    public boolean execRule(RuleParamDTO ruleParam) {
        Map<String, Object> bizData = ruleParam.getBizData();
        String orderNo = (String) bizData.get(RuleSetConstants.ORDER_NO);
        String mscLineNo = (String) bizData.get(RuleSetConstants.MSC_LINE_NO);

        PmProContProdTtr axisPmProContProdTtr = (PmProContProdTtr) bizData.get(RuleSetConstants.AXIS_PM_PRO_CONT_PROD_ATTR);
        PmProContProdTtr pmProContProdTtr = (PmProContProdTtr) bizData.get(RuleSetConstants.PM_PRO_CONT_PROD_ATTR);
        if (null == axisPmProContProdTtr || StringUtils.isBlank(axisPmProContProdTtr.getGiveSampleCode())) {
            // 读生产合同池没有找到记录，合同号【order_no】，产线号【msc_line_no】
            throw new CommonException("pm.pm_pd_rule_set_001", orderNo, mscLineNo);
        }
        
        if(null != pmProContProdTtr) {
            if(BaseConstants.Flag.YES.toString().equals(axisPmProContProdTtr.getGiveSampleCode())) {
                if(!pmProContProdTtr.getOrderNo().equals(axisPmProContProdTtr.getOrderNo())){
                    // 一张大板上有且只能有一个奉送样合同。
                    throw new CommonException("pm.pm_pd_rule_set_038");
                }
            } else {
                if(StringUtils.isNotBlank(pmProContProdTtr.getGiveSampleCode()) 
                        && BaseConstants.Flag.YES.toString().equals(pmProContProdTtr.getGiveSampleCode())) {
                    // 一张大板上有且只能有一个奉送样合同。
                    throw new CommonException("pm.pm_pd_rule_set_038");
                }
            }
        }
        return true ;
    }

}
