package main

import (
	"fmt"
	"os"
	"strconv"
	"time"

	"github.com/tidbcloud/tiinf/transport/tieventbus"
)

const (
	EventType = "test-eventbus"
)

type EventData struct {
	ID int
}

func main() {
	eventbus, err := tieventbus.NewEventbus(tieventbus.EventbusConfig{
		AppName: "app",
	})
	if err != nil {
		panic(err)
	}
	eventbus.RegisterHandler(
		tieventbus.HandlerConfig{
			EventType: EventType,
			Group:     "consumer",
			HandleFunc: func(event *tieventbus.Event) error {
				fmt.Println(fmt.Sprintf("Recieved event(ID=%d)", event.Data.(*EventData).ID))
				return nil
			},
			DataStruct: EventData{},
		})
	err = eventbus.Run()
	if err != nil {
		panic(err)
	}
	for i := 0; i != 100; i++ {
		err := eventbus.Publish(&tieventbus.Event{
			ID:   strconv.Itoa(1),
			Type: EventType,
			Data: &EventData{
				ID: i,
			},
		})
		if err != nil {
			panic(err)
		}
	}
	time.Sleep(5 * time.Second)
	os.Exit(0)
}
