package fileobjectstorage

import (
	"go.uber.org/zap"

	"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/config"
	dom_file "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/domain/file"
)

// Wire providers for file object storage use cases

func ProvideStoreEncryptedDataUseCase(
	cfg *config.Configuration,
	logger *zap.Logger,
	repo dom_file.FileObjectStorageRepository,
) StoreEncryptedDataUseCase {
	return NewStoreEncryptedDataUseCase(cfg, logger, repo)
}

func ProvideGetEncryptedDataUseCase(
	cfg *config.Configuration,
	logger *zap.Logger,
	repo dom_file.FileObjectStorageRepository,
) GetEncryptedDataUseCase {
	return NewGetEncryptedDataUseCase(cfg, logger, repo)
}

func ProvideDeleteEncryptedDataUseCase(
	cfg *config.Configuration,
	logger *zap.Logger,
	repo dom_file.FileObjectStorageRepository,
) DeleteEncryptedDataUseCase {
	return NewDeleteEncryptedDataUseCase(cfg, logger, repo)
}

func ProvideStoreMultipleEncryptedDataUseCase(
	cfg *config.Configuration,
	logger *zap.Logger,
	repo dom_file.FileObjectStorageRepository,
) StoreMultipleEncryptedDataUseCase {
	return NewStoreMultipleEncryptedDataUseCase(cfg, logger, repo)
}

func ProvideDeleteMultipleEncryptedDataUseCase(
	cfg *config.Configuration,
	logger *zap.Logger,
	repo dom_file.FileObjectStorageRepository,
) DeleteMultipleEncryptedDataUseCase {
	return NewDeleteMultipleEncryptedDataUseCase(cfg, logger, repo)
}

func ProvideVerifyObjectExistsUseCase(
	cfg *config.Configuration,
	logger *zap.Logger,
	repo dom_file.FileObjectStorageRepository,
) VerifyObjectExistsUseCase {
	return NewVerifyObjectExistsUseCase(cfg, logger, repo)
}

func ProvideGeneratePresignedUploadURLUseCase(
	cfg *config.Configuration,
	logger *zap.Logger,
	repo dom_file.FileObjectStorageRepository,
) GeneratePresignedUploadURLUseCase {
	return NewGeneratePresignedUploadURLUseCase(cfg, logger, repo)
}

func ProvideGetObjectSizeUseCase(
	cfg *config.Configuration,
	logger *zap.Logger,
	repo dom_file.FileObjectStorageRepository,
) GetObjectSizeUseCase {
	return NewGetObjectSizeUseCase(cfg, logger, repo)
}

func ProvideGeneratePresignedDownloadURLUseCase(
	cfg *config.Configuration,
	logger *zap.Logger,
	repo dom_file.FileObjectStorageRepository,
) GeneratePresignedDownloadURLUseCase {
	return NewGeneratePresignedDownloadURLUseCase(cfg, logger, repo)
}
