// Package integration contains adapters for external systems and runtime
// clients. These constructors are kept out of the persistence provider set so
// the data package does not also act as the integration composition root.
package integration

import (
	"kra/internal/biz"
	"kra/internal/integration/cache"
	"kra/internal/integration/email"
	mqintegration "kra/internal/integration/mq"
	"kra/internal/integration/storage"
	websocketintegration "kra/internal/integration/websocket"
	"kra/pkg/mq"
	platformws "kra/pkg/websocket"

	"github.com/google/wire"
)

var ProviderSet = wire.NewSet(
	cache.New,
	email.NewEmailRepo,
	storage.NewFileStorage,
	mqintegration.New,
	wire.Bind(new(mq.Client), new(*mqintegration.Reloadable)),
	wire.Bind(new(mq.Registry), new(*mqintegration.Reloadable)),
	websocketintegration.New,
	wire.Bind(new(platformws.Hub), new(*websocketintegration.Server)),
	wire.Bind(new(biz.FileStorage), new(*storage.Reloadable)),
)
