using Tiku.Application.Assets;
using Tiku.Application.Jobs;
using Tiku.Application.Security;
using Tiku.Application.Storage;
using Tiku.Application.Tenancy;
using Tiku.Infrastructure.Persistence;

namespace Tiku.Infrastructure.Assets;

internal sealed record AssetManagementDependencies(
    IContentAssetPersistence ContentAssetPersistence,
    IQuestionBankPersistence QuestionBankPersistence,
    IObjectStorageService ObjectStorageService,
    ITenantExternalProviderConfigService ProviderConfigService,
    IFeatureAccessService FeatureAccessService,
    IBackgroundJobQueue BackgroundJobService);

internal abstract partial class AssetManagementServiceBase(AssetManagementDependencies dependencies)
{
    protected IContentAssetPersistence contentAssetPersistence { get; } = dependencies.ContentAssetPersistence;
    protected IQuestionBankPersistence questionBankPersistence { get; } = dependencies.QuestionBankPersistence;
    protected IObjectStorageService objectStorageService { get; } = dependencies.ObjectStorageService;
    protected ITenantExternalProviderConfigService providerConfigService { get; } = dependencies.ProviderConfigService;
    protected IFeatureAccessService featureAccessService { get; } = dependencies.FeatureAccessService;
    protected IBackgroundJobQueue backgroundJobService { get; } = dependencies.BackgroundJobService;
    protected const int DefaultLimit = 100;
    protected const int MaxLimit = 500;
    protected static readonly TimeSpan DefaultUploadTtl = TimeSpan.FromMinutes(15);
    protected static readonly TimeSpan MaxUploadTtl = TimeSpan.FromHours(1);
}
