package sub_client

import (
	"github.com/seaweedfs/seaweedfs/weed/pb/mq_pb"
	"google.golang.org/grpc"
)

type SubscriberConfiguration struct {
	ClientId          string
	GroupId           string
	GroupInstanceId   string
	GroupMinimumPeers int32
	GroupMaximumPeers int32
	BootstrapServers  []string
	GrpcDialOption    grpc.DialOption
}

type ContentConfiguration struct {
	Namespace string
	Topic     string
	Filter    string
}

type OnEachMessageFunc func(key, value []byte) (shouldContinue bool)
type OnCompletionFunc func()

type TopicSubscriber struct {
	SubscriberConfig           *SubscriberConfiguration
	ContentConfig              *ContentConfiguration
	brokerPartitionAssignments []*mq_pb.BrokerPartitionAssignment
	OnEachMessageFunc          OnEachMessageFunc
	OnCompletionFunc           OnCompletionFunc
	bootstrapBroker            string
}

func NewTopicSubscriber(bootstrapBroker string, subscriber *SubscriberConfiguration, content *ContentConfiguration) *TopicSubscriber {
	return &TopicSubscriber{
		SubscriberConfig: subscriber,
		ContentConfig:    content,
		bootstrapBroker:  bootstrapBroker,
	}
}

func (sub *TopicSubscriber) SetEachMessageFunc(onEachMessageFn OnEachMessageFunc) {
	sub.OnEachMessageFunc = onEachMessageFn
}

func (sub *TopicSubscriber) SetCompletionFunc(onCompeletionFn OnCompletionFunc) {
	sub.OnCompletionFunc = onCompeletionFn
}