using Tiku.Application.Commerce;
using Tiku.Application.Jobs;
using Tiku.Application.Security;
using Tiku.Application.Tenancy;
using Tiku.Infrastructure.Persistence;

namespace Tiku.Infrastructure.Commerce;

internal sealed record CommerceAdministrationDependencies(
    ICommercePersistence CommercePersistence,
    IPointsPersistence PointsPersistence,
    ICatalogPersistence CatalogPersistence,
    IIdentityPersistence IdentityPersistence,
    ITenancyPersistence TenancyPersistence,
    IJobsOperationsPersistence JobsOperationsPersistence,
    ITenantSecretProtector TenantSecretProtector,
    ITenantExternalProviderConfigService ProviderConfigService,
    ICurrentAccessContext CurrentAccessContext,
    IBackgroundJobQueue BackgroundJobQueue,
    IBackgroundJobOperations BackgroundJobOperations);

internal abstract partial class CommerceAdministrationServiceBase(CommerceAdministrationDependencies dependencies)
{
    protected ICommercePersistence commercePersistence { get; } = dependencies.CommercePersistence;
    protected IPointsPersistence pointsPersistence { get; } = dependencies.PointsPersistence;
    protected ICatalogPersistence catalogPersistence { get; } = dependencies.CatalogPersistence;
    protected IIdentityPersistence identityPersistence { get; } = dependencies.IdentityPersistence;
    protected ITenancyPersistence tenancyPersistence { get; } = dependencies.TenancyPersistence;
    protected IJobsOperationsPersistence jobsOperationsPersistence { get; } = dependencies.JobsOperationsPersistence;
    protected IModulePersistence unitOfWork { get; } = dependencies.CommercePersistence;
    protected ITenantSecretProtector tenantSecretProtector { get; } = dependencies.TenantSecretProtector;
    protected ITenantExternalProviderConfigService providerConfigService { get; } = dependencies.ProviderConfigService;
    protected ICurrentAccessContext currentAccessContext { get; } = dependencies.CurrentAccessContext;
    protected IBackgroundJobQueue backgroundJobQueue { get; } = dependencies.BackgroundJobQueue;
    protected IBackgroundJobOperations backgroundJobOperations { get; } = dependencies.BackgroundJobOperations;
}
