namespace CMSMicroservice.Application.Common.Interfaces;
///
/// استراتژی محاسبه کمیسیون هفتگی
/// دو پیادهسازی دارد: ORM و Stored Procedure
///
public interface ICommissionCalculationStrategy
{
///
/// محاسبه تعادلهای هفتگی (مرحله 1)
///
/// شناسه هفته
/// محاسبه مجدد حتی اگر قبلاً محاسبه شده
/// اگر مقدار داشته باشد فقط این پکیج محاسبه میشود — در غیر این صورت همه پکیجها
/// توکن لغو
/// تعداد رکوردهای محاسبه شده
Task CalculateWeeklyBalancesAsync(
long weekDefinitionId,
bool forceRecalculate,
long? packageId = null,
CancellationToken cancellationToken = default);
///
/// محاسبه استخر کمیسیون و پرداختها (مرحله 2)
///
/// شناسه هفته
/// محاسبه مجدد حتی اگر قبلاً محاسبه شده
/// اگر مقدار داشته باشد فقط این پکیج محاسبه میشود — در غیر این صورت همه پکیجها
/// توکن لغو
/// شناسه Pool ایجاد شده
Task CalculateWeeklyCommissionPoolAsync(
long weekDefinitionId,
bool forceRecalculate,
long? packageId = null,
CancellationToken cancellationToken = default);
}
///
/// نوع استراتژی محاسبه کمیسیون
///
public enum CommissionCalculationStrategyType
{
///
/// استفاده از Entity Framework (ORM) - پیشفرض
///
Orm = 0,
///
/// استفاده از Stored Procedure - بهینهتر برای دادههای زیاد
///
StoredProcedure = 1
}