package org.ts.ddcs.itemdatatemplate.sw;


import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.ts.ddcs.common.util.BytesHelp;
import org.ts.ddcs.common.util.Sw2014DatagramTemplateHelp;
import org.ts.ddcs.common.util.ValueLen;
import org.ts.ddcs.itemdatatemplate.DataItemTemplate;

import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * 0x23
 * 10分钟时段降水量,毫米 ,N(5,1)
 */
@Slf4j
public class DataItemTemplatePN10 extends DataItemTemplate {


//    @Override
//    public boolean OutlierData() {
//        if (null != this.valueBuff && this.valueBuff.length > 0) {
//            boolean isOutlierData=true;
//            String hexStr = BytesHelp.byte2HexStr(this.valueBuff);
//            for (int i=0;i<hexStr.length();i++){
//                String c = hexStr.substring(i,i+1);
//                if (!c.equals("F")){
//                    isOutlierData=false;
//                    break;
//                }
//            }
//            return isOutlierData;
//        }
//        return false;
//    }

    @Override
    public int stream(byte[] data, int index) throws UnsupportedEncodingException {
        log.info("template {}",this.getClass().getName());
        this.macth = false;
        this.bigDecimalValues = new ArrayList<>();
        int count = 0;
        String flag = BytesHelp.byte2HexStr(data, index + count, 1);
        if (flag.toUpperCase().equals(this.feture)) {
            count += 1;
            ValueLen valueLen = Sw2014DatagramTemplateHelp.getValueLen(data, index + count);
            count += 1;
            this.readBigDecimalValue(data, index + count, valueLen);
            count += valueLen.getByteLen();
            this.valueLen = valueLen;
            this.macth = true;
        }
        return count;
    }

    @Override
    public int stream(byte[] data, int index, int batchSize) {
        return 0;
    }

    @Override
    public String getStringValue() {
        BigDecimal value = this.bigDecimalValues.get(0);
        return value.setScale(this.valueLen.getDecimalLen(), BigDecimal.ROUND_DOWN).toPlainString();
    }

    @Override
    public void saveValue(Map<String, List<Map<String,Object>>> keyStore) {
        this.saveBigDecimalValues(keyStore, this.valueLen.getDecimalLen());
    }
}
