namespace CMSMicroservice.Domain.Entities.Network;
///
/// تعادلهای هفتگی شبکه باینری
///
public class NetworkWeeklyBalance : BaseAuditableEntity
{
///
/// شناسه کاربر
///
public long UserId { get; set; }
///
/// User Navigation Property
///
public virtual User User { get; set; }
///
/// شماره هفته (مثال: "2025-W48")
///
public string WeekNumber { get; set; }
///
/// تعداد اعضای جدید شاخه چپ در این هفته
///
public int LeftLegNewMembers { get; set; }
///
/// تعداد اعضای جدید شاخه راست در این هفته
///
public int RightLegNewMembers { get; set; }
///
/// باقیمانده شاخه چپ از هفته قبل (Carryover)
///
public int LeftLegCarryover { get; set; }
///
/// باقیمانده شاخه راست از هفته قبل (Carryover)
///
public int RightLegCarryover { get; set; }
///
/// مجموع شاخه چپ: LeftLegNewMembers + LeftLegCarryover
///
public int LeftLegTotal { get; set; }
///
/// مجموع شاخه راست: RightLegNewMembers + RightLegCarryover
///
public int RightLegTotal { get; set; }
///
/// تعداد تعادل (امتیاز): MIN(LeftLegTotal, RightLegTotal)
///
public int TotalBalances { get; set; }
///
/// باقیمانده شاخه چپ برای هفته بعد
///
public int LeftLegRemainder { get; set; }
///
/// باقیمانده شاخه راست برای هفته بعد
///
public int RightLegRemainder { get; set; }
///
/// مقدار فلش هر طرف (بعد از اعمال Cap): TotalBalances - CappedBalances
///
public int FlushedPerSide { get; set; }
///
/// مجموع فلش از دو طرف: FlushedPerSide × 2
/// این مقدار از دست میرود (نه به هفته بعد، نه به کمیسیون)
///
public int TotalFlushed { get; set; }
///
/// مجموع تعادل زیرمجموعه این کاربر (تا 15 لول پایینتر)
/// این مقدار در CalculateWeeklyBalances محاسبه و ذخیره میشود
///
public int SubordinateBalances { get; set; }
///
/// [DEPRECATED] تعداد تعادل شاخه چپ - استفاده نشود
///
[Obsolete("Use LeftLegTotal instead")]
public int LeftLegBalances { get; set; }
///
/// [DEPRECATED] تعداد تعادل شاخه راست - استفاده نشود
///
[Obsolete("Use RightLegTotal instead")]
public int RightLegBalances { get; set; }
///
/// مبلغی که از این کاربر به استخر هفتگی اضافه شد (ریال)
///
public long WeeklyPoolContribution { get; set; }
///
/// زمان محاسبه توسط Worker
///
public DateTime? CalculatedAt { get; set; }
///
/// آیا منقضی شده (بعد از توزیع کمیسیون)
///
public bool IsExpired { get; set; }
}