package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.rulematch;

import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipVariableCfgRuleMatchDispatchService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.BarCodeUtils;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCfgCollectContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;

import java.util.ArrayList;
import java.util.List;

/**
 * 将不为空的数据变量全部返回
 */
@Slf4j
@Service
public class MesEvcRuleMatchBackValueService implements IMesEquipVariableCfgRuleMatchDispatchService {

    @Override
    public List<MesEquipVariableCollectContext> matchEquipVariableCfgCollectContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, String variableCategory, List<MesEquipVariableCfgCollectContext> collectContextList, Boolean isUpperCase) {

        List<MesEquipVariableCollectContext> backList = null;

        for (MesEquipVariableCfgCollectContext collectContext : collectContextList) {

            if (null == collectContext || CollectionUtils.isEmpty(collectContext.getEquipVariableCollectContextList())) continue;

            for (MesEquipVariableCollectContext equipVariableCollectContext : collectContext.getEquipVariableCollectContextList()) {

                if (null == equipVariableCollectContext || StringUtils.isEmpty(equipVariableCollectContext.getEquipVariableValue())) continue;

                if (StringUtils.isEmpty(filterSpecialChar(equipVariableCollectContext, isUpperCase).getEquipVariableValue())) continue;

                if (CollectionUtils.isEmpty(backList)) backList = new ArrayList<>();

                backList.add(equipVariableCollectContext);

            }

        }

        return backList;

    }

    //不过滤":"，tesla零件号带冒号
    //不过滤[)>字符
    private MesEquipVariableCollectContext filterSpecialChar(MesEquipVariableCollectContext equipVariableCollectContext, Boolean isUpperCase) {

        equipVariableCollectContext.trimValue(isUpperCase);

        String realEquipVariableValue = equipVariableCollectContext.getEquipVariableValue();

        String equipVariableValue = BarCodeUtils.removePatternSpecialCharacter(equipVariableCollectContext.getEquipVariableValue());

        return realEquipVariableValue.equals(equipVariableValue) ? equipVariableCollectContext : equipVariableCollectContext.replaceValue(realEquipVariableValue, equipVariableValue);

    }

}
