package grpc

import (
	"go.unistack.org/micro/v3/client"
	"go.unistack.org/micro/v3/metadata"
)

type grpcEvent struct {
	payload     interface{}
	topic       string
	contentType string
	opts        client.MessageOptions
}

func newGRPCEvent(topic string, payload interface{}, contentType string, opts ...client.MessageOption) client.Message {
	options := client.NewMessageOptions(opts...)

	if len(options.ContentType) > 0 {
		contentType = options.ContentType
	}

	return &grpcEvent{
		payload:     payload,
		topic:       topic,
		contentType: contentType,
		opts:        options,
	}
}

func (g *grpcEvent) ContentType() string {
	return g.contentType
}

func (g *grpcEvent) Topic() string {
	return g.topic
}

func (g *grpcEvent) Payload() interface{} {
	return g.payload
}

func (g *grpcEvent) Metadata() metadata.Metadata {
	return g.opts.Metadata
}