package rx

import (
	"fmt"
	"git.solsynth.dev/hypernet/nexus/pkg/nex"
	"github.com/nats-io/nats.go"
)

type MqConn struct {
	n *nex.Conn

	Nt *nats.Conn
}

func NewMqConn(conn *nex.Conn) (*MqConn, error) {
	c := &MqConn{
		n: conn,
	}

	mqAddr := conn.AllocResource(nex.AllocatableResourceMq)
	if mqAddr == nil {
		return nil, fmt.Errorf("unable to allocate resource: message queue")
	} else if addr, ok := mqAddr.(string); !ok {
		return nil, fmt.Errorf("alloced mq resource address is not a string")
	} else if nc, err := nats.Connect(addr); err != nil {
		return nil, fmt.Errorf("unable to connect to nats server: %v", err)
	} else {
		c.Nt = nc
	}

	return c, nil
}