package rabbitmq

import (
	"fmt"
	"wdd.io/agent-go/g"
)

var P = g.G.P

type OctopusMsgHandler interface {
	HandleMsg(*RabbitReceiveChan)
}

func (om *OctopusMessage) HandleMsg(rChan *RabbitReceiveChan) {
	// 实际执行 OM handle进程
	log.DebugF("接收到OctopusMessage => %s, 开始处理!", om.OctopusMessageType)
	doHandleOctopusMessage(om, rChan)
}

func doHandleOctopusMessage(octopusMessage *OctopusMessage, rChan *RabbitReceiveChan) {

	switch octopusMessage.OctopusMessageType {
	case g.InitOmType:
		rChan.InitRChan <- octopusMessage
	case g.ExecOmType:
		rChan.ExecutorRChan <- octopusMessage
	case g.StatusOmType:
		rChan.StatusRChan <- octopusMessage
	case g.AgentOmType:
		rChan.AgentRChan <- octopusMessage
	default:
		P.Submit(func() {
			blackHoleOMHandler(octopusMessage)
		})
	}

}

func blackHoleOMHandler(octopusMessage *OctopusMessage) {
	log.Error(fmt.Sprintf("[BLACK HOLE] octopusMessage type wrong! msg is => %v", octopusMessage))
}
