package vstp

import (
	"time"

	"git.fjla.uk/owlboard/timetable-mgr/log"
	"git.fjla.uk/owlboard/timetable-mgr/messaging"
	"github.com/go-stomp/stomp/v3"
)

func Subscribe() {
	sub, err := messaging.Client.Subscribe("/topic/VSTP_ALL", stomp.AckAuto)
	if err != nil {
		log.Msg.Fatal("Unable to start subscription: " + err.Error())
	}
	log.Msg.Info("Subscription to VSTP topic successful, listening")

	go func() {
		log.Msg.Debug("GOROUTINE: VSTP Message Handler Started")
		defer func() {
			if r := recover(); r != nil {
				log.Msg.Warn("GOROUTINE: VSTP Message Handler Stopped")
				time.Sleep(time.Second * 10)
				log.Msg.Fatal("GOROUTINE: VSTP Message Handler Failed")
			}
		}()
		for {
			msg := <-sub.C
			if msg.Err != nil {
				log.Msg.Error("STOMP Message Error: " + msg.Err.Error())
			} else {
				log.Msg.Info("STOMP Message Received")
				handle(msg)
			}
		}
	}()

	select {}
}
