package util

import (
	"fmt"
	"github.com/nats-io/nats.go"
	"github.com/vmihailenco/msgpack/v5"
	"time"
	"ydMonitoring/config"
)

var (
	Nats *nats.Conn
	url  string
)

// 初始化
func init() {
	url = config.Config.GetString("nats.url")

	fmt.Println("============Nats init============")
	var err error
	// 连接Nats服务器
	Nats, err = nats.Connect("nats://" + url)
	if err != nil {
		panic(any("nats 连接失败！"))
	}
	fmt.Println("nats OK！")
}

type T_Warning struct {
	T_tp      int       `xml:"T_tp"`      // 报警类型   ->WarningList
	T_sn      string    `xml:"T_sn"`      // 设备序列号
	T_D_name  string    `xml:"T_D_name"`  // 设备名称
	T_id      int       `xml:"T_id"`      // 传感器 ID
	T_DS_name string    `xml:"T_DS_name"` // 传感器名称
	T_Remark  string    `xml:"T_Remark"`  // 采集内容
	T_Ut      time.Time `xml:"T_Ut"`      // 采集时间
	T_ToAdmin []int     `xml:"T_ToAdmin"` // 发送给谁 Admin.Id
	T_State   int       `xml:"T_State"`   // 0 删除   1 不处理   2 已处理    3 未处理
}

// SendWarning 发送报警（level 等级 label 标签 msg 内容 args 参数）
func SendWarning(tSn string, tId int, tDevName, tSensorName, msg string) {

	T_Warning_r := T_Warning{
		T_tp:      1012,
		T_sn:      tSn,
		T_D_name:  "",
		T_id:      tId,
		T_DS_name: "",
		T_Remark:  msg,
		T_Ut:      time.Now(),
		T_State:   3,
	}
	AddWarning(T_Warning_r)

	fmt.Println(tSn, tDevName, msg)
}

func AddWarning(r T_Warning) bool {
	b, err := msgpack.Marshal(&r)
	if err != nil {
		fmt.Println(err)
	}
	// 请求-响应， 向 test3 发布一个 `help me` 请求数据，设置超时间3秒，如果有多个响应，只接收第一个收到的消息
	msg, err := Nats.Request("AddWarning", b, 3*time.Second)
	if err != nil {
		fmt.Println(err)
	} else {
		fmt.Printf("AddWarning : %s\n", string(msg.Data))
		return true
	}

	return false
}
