package notifications

import (
	"encoding/json"

	messaging "github.com/tech/sendico/pkg/messaging/envelope"
	"github.com/tech/sendico/pkg/model"
	nm "github.com/tech/sendico/pkg/model/notification"
	"github.com/tech/sendico/pkg/mservice"
)

type TelegramReactionNotification struct {
	messaging.Envelope
	payload model.TelegramReactionRequest
}

func (trn *TelegramReactionNotification) Serialize() ([]byte, error) {
	data, err := json.Marshal(trn.payload)
	if err != nil {
		return nil, err
	}
	return trn.Envelope.Wrap(data)
}

func telegramReactionEvent() model.NotificationEvent {
	return model.NewNotification(mservice.Notifications, nm.NATelegramReaction)
}

func NewTelegramReactionEnvelope(sender string, request *model.TelegramReactionRequest) messaging.Envelope {
	var payload model.TelegramReactionRequest
	if request != nil {
		payload = *request
	}
	return &TelegramReactionNotification{
		Envelope: messaging.CreateEnvelope(sender, telegramReactionEvent()),
		payload:  payload,
	}
}
