package com.njcn.gather.detection.util.socket;

import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.njcn.gather.detection.pojo.vo.SocketDataMsg;

import java.util.Map;

/**
 * @author wr
 * @description
 * @date 2024/12/11 19:27
 */

public class MsgUtil {


    public static SocketDataMsg socketDataMsg(String textMsg) {
        return JSON.parseObject(textMsg, SocketDataMsg.class);
    }

    /**
     * 将对象转换为 JSON 字符串，并在末尾添加换行符
     *
     * @param obj 需要转换的对象
     * @return 包含换行符的 JSON 字符串
     */
    public static String toJsonWithNewLine(Object obj) {
        return JSON.toJSONString(obj, SerializerFeature.PrettyFormat) + "\n";
    }

    /**
     * 将对象转换为 JSON 字符串，并在末尾添加换行符（不带格式化）
     *
     * @param obj 需要转换的对象
     * @return 包含换行符的 JSON 字符串
     */
    public static String toJsonWithNewLinePlain(Object obj) {
        return JSON.toJSONString(obj) + "\n";
    }


    /**
     * @param socketDataMsg
     * @param devMap
     * @param type          0.装置 1.监测点
     * @return
     */
    public static String msgToWebData(SocketDataMsg socketDataMsg, Map<String, String> devMap, Integer type) {
        String data = socketDataMsg.getData();
        if (StrUtil.isNotBlank(data)) {
            String[] parts = data.split("_");
            if (parts.length > 0) {
                String key = parts[0];
                String newValue = devMap.get(key);
                if (newValue != null) {
                    if (type == 0) {
                        socketDataMsg.setData(newValue);
                    } else {
                        socketDataMsg.setData(newValue + "_" + parts[1] + "路");
                    }
                }
            }
        }
        return JSON.toJSONString(socketDataMsg);
    }

    /**
     * 获取一组监测点配对的字符串
     *
     * @param devMonitorId
     * @param standardDevId
     * @param devMap        key为设备ip，value为设备名称
     * @return
     */
    public static String getPairStr(String devMonitorId, String standardDevId, Map<String, String> devMap) {
        if (StrUtil.isBlank(devMonitorId) || StrUtil.isBlank(standardDevId)) {
            return "";
        } else {
            String[] split1 = devMonitorId.split("_");
            String[] split2 = standardDevId.split("_");
            return "被检设备\"" + devMap.get(split1[0]) + CnSocketUtil.SPLIT_TAG + split1[1] + "路\"" + " -> 标准设备\"" + devMap.get(split2[0]) + CnSocketUtil.SPLIT_TAG + split2[1] + "路\"";
        }
    }

    public static String getMonitorInfo(String monitorId, Map<String, String> devMap) {
        if (StrUtil.isBlank(monitorId)) {
            return "";
        } else {
            String[] split1 = monitorId.split("_");
            return devMap.get(split1[0]) + CnSocketUtil.SPLIT_TAG + split1[1] + "路\"";
        }
    }

    /**
     * 获取消息
     *
     * @param monitorId 监测点id
     * @param devMap    key为设备ip，value为设备名称
     * @param appendMsg 附加的消息
     * @return
     */
    public static String getMsg(String monitorId, Map<String, String> devMap, String appendMsg) {
        String[] split1 = monitorId.split("_");
        return "\"" + devMap.get(split1[0]) + CnSocketUtil.SPLIT_TAG + "第" + split1[1] + "路\"" + appendMsg;
    }
}
