package tag

import (
	"go.uber.org/zap"

	uc_tag "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/usecase/tag"
)

// ProvideTagService provides the tag service for Wire DI
func ProvideTagService(
	createTagUC *uc_tag.CreateTagUseCase,
	getTagByIDUC *uc_tag.GetTagByIDUseCase,
	listTagsByUserUC *uc_tag.ListTagsByUserUseCase,
	updateTagUC *uc_tag.UpdateTagUseCase,
	deleteTagUC *uc_tag.DeleteTagUseCase,
	assignTagUC *uc_tag.AssignTagUseCase,
	unassignTagUC *uc_tag.UnassignTagUseCase,
	getTagsForEntityUC *uc_tag.GetTagsForEntityUseCase,
) *TagService {
	return NewTagService(
		createTagUC,
		getTagByIDUC,
		listTagsByUserUC,
		updateTagUC,
		deleteTagUC,
		assignTagUC,
		unassignTagUC,
		getTagsForEntityUC,
	)
}

// ProvideSearchByTagsService provides the search by tags service for Wire DI
func ProvideSearchByTagsService(
	logger *zap.Logger,
	listCollectionsUC *uc_tag.ListCollectionsByTagUseCase,
	listFilesUC *uc_tag.ListFilesByTagUseCase,
) *SearchByTagsService {
	return NewSearchByTagsService(
		logger,
		listCollectionsUC,
		listFilesUC,
	)
}
