package cloud_pubsub

import (
	"cloud.google.com/go/pubsub"
	"context"
)

type (
	topicFactory func(string) (topic, error)

	topic interface {
		ID() string
		Stop()
		Publish(ctx context.Context, msg *pubsub.Message) publishResult
		PublishSettings() pubsub.PublishSettings
		SetPublishSettings(settings pubsub.PublishSettings)
	}

	publishResult interface {
		Get(ctx context.Context) (string, error)
	}

	topicWrapper struct {
		topic *pubsub.Topic
	}
)

func (tw *topicWrapper) ID() string {
	return tw.topic.ID()
}

func (tw *topicWrapper) Stop() {
	tw.topic.Stop()
}

func (tw *topicWrapper) Publish(ctx context.Context, msg *pubsub.Message) publishResult {
	return tw.topic.Publish(ctx, msg)
}

func (tw *topicWrapper) PublishSettings() pubsub.PublishSettings {
	return tw.topic.PublishSettings
}

func (tw *topicWrapper) SetPublishSettings(settings pubsub.PublishSettings) {
	tw.topic.PublishSettings = settings
}