package org.ts.ddcs.DataTemplate;

import com.alibaba.fastjson.JSONObject;
import org.ts.ddcs.Log.LogHelper;
import org.ts.ddcs.Tool.BytesHelp;

import java.util.LinkedList;
import java.util.List;

/**
 * 查询状态和报警信息
 */
@SuppressWarnings("all")
public class DataTemplateF46 extends DataTemplate {
    private String dataInfo;
    private byte[] serialNo;
    private byte[] sendPacketTime;
    private byte[] addrFlag;
    private byte[] dataAreaRtuCode;

    @Override
    public void Stream() {
        try {
            if (dataLen > 0) {
                int count = 0;
                this.serialNo = BytesHelp.subBytes(this.dataArea, count, 2); //流水号
                count += 2;
                this.sendPacketTime = BytesHelp.subBytes(this.dataArea, count, 6); // 发报时间
                count += 6;
                this.addrFlag = BytesHelp.subBytes(this.dataArea, count, 2); //地址标识符
                count += 2;
                this.dataAreaRtuCode = BytesHelp.subBytes(this.dataArea, count, 5); //遥测站地址
                count += 5;

                byte[] flag = BytesHelp.subBytes(this.dataArea, count, 2);
                count += 2;

                byte[] statusBuff = BytesHelp.subBytes(this.dataArea, count, 2);
                count += 4;

                String binStr = BytesHelp.BytesToBinStr(statusBuff);
                binStr = new StringBuilder(binStr).reverse().toString();
                JSONObject data = new JSONObject();
                data.put("rtuCode", BytesHelp.byte2HexStr(this.dataAreaRtuCode));
                data.put("func", "46");
                List<JSONObject> items = new LinkedList<>();
                JSONObject item = new JSONObject();
                item.put("name", "交流电充电状态");
                if (binStr.substring(0, 1).equals("0")) {
                    item.put("value", "正常");
                } else {
                    item.put("value", "停电");
                }
                items.add(item);
                item = new JSONObject();
                item.put("name", "蓄电池电压状态");
                if (binStr.substring(1, 2).equals("0")) {
                    item.put("value", "正常");
                } else {
                    item.put("value", "电压低");
                }
                items.add(item);
                item = new JSONObject();
                item.put("name", "水位超限报警状态");
                if (binStr.substring(2, 3).equals("0")) {
                    item.put("value", "正常");
                } else {
                    item.put("value", "报警");
                }
                items.add(item);
                item = new JSONObject();
                item.put("name", "流量超限报警状态");
                if (binStr.substring(3, 4).equals("0")) {
                    item.put("value", "正常");
                } else {
                    item.put("value", "报警");
                }
                items.add(item);
                item = new JSONObject();
                item.put("name", "水质超限报警状态");
                if (binStr.substring(4, 5).equals("0")) {
                    item.put("value", "正常");
                } else {
                    item.put("value", "报警");
                }
                items.add(item);
                item = new JSONObject();
                item.put("name", "流量仪表状态");
                if (binStr.substring(5, 6).equals("0")) {
                    item.put("value", "正常");
                } else {
                    item.put("value", "故障");
                }
                items.add(item);
                item = new JSONObject();
                item.put("name", "水位仪表状态");
                if (binStr.substring(6, 7).equals("0")) {
                    item.put("value", "正常");
                } else {
                    item.put("value", "故障");
                }
                items.add(item);
                item = new JSONObject();
                item.put("name", "终端箱门状态");
                if (binStr.substring(7, 8).equals("0")) {
                    item.put("value", "开启");
                } else {
                    item.put("value", "关闭");
                }
                items.add(item);
                item = new JSONObject();
                item.put("name", "存储器状态");
                if (binStr.substring(8, 9).equals("0")) {
                    item.put("value", "正常");
                } else {
                    item.put("value", "异常");
                }
                items.add(item);
                item = new JSONObject();
                item.put("name", "IC卡功能有效");
                if (binStr.substring(9, 10).equals("0")) {
                    item.put("value", "关闭");
                } else {
                    item.put("value", "IC卡有效");
                }
                items.add(item);
                item = new JSONObject();
                item.put("name", "水泵工作状态");
                if (binStr.substring(10, 11).equals("0")) {
                    item.put("value", "水泵工作");
                } else {
                    item.put("value", "水泵停机");
                }
                items.add(item);
                item = new JSONObject();
                item.put("name", "剩余水量报警");
                if (binStr.substring(11, 12).equals("0")) {
                    item.put("value", "未超限");
                } else {
                    item.put("value", "水量超限");
                }
                items.add(item);
                data.put("data", items);
                this.dataInfo = data.toJSONString();
            }
        } catch (Exception e) {
            LogHelper.error(e);
        }
    }

    @Override
    public String getDataInfo() {
        return dataInfo;
    }
}
