package messaging

import (
	"time"

	"github.com/google/uuid"
	messagingimp "github.com/tech/sendico/pkg/messaging/internal/envelope"
	md "github.com/tech/sendico/pkg/messaging/message"
	"github.com/tech/sendico/pkg/model"
)

type Envelope interface {
	md.Message
	GetTimeStamp() time.Time
	GetMessageId() uuid.UUID
	GetData() []byte
	GetSender() string
	GetSignature() model.NotificationEvent
	Wrap([]byte) ([]byte, error)
}

func Deserialize(data []byte) (Envelope, error) {
	return messagingimp.DeserializeImp(data)
}

func CreateEnvelope(sender string, event model.NotificationEvent) Envelope {
	return messagingimp.CreateEnvelopeImp(sender, event)
}
