namespace CMSMicroservice.Domain.Entities.Club;

/// <summary>
/// عضویت در باشگاه مشتریان
/// </summary>
public class ClubMembership : BaseAuditableEntity
{
    /// <summary>
    /// شناسه کاربر
    /// </summary>
    public long UserId { get; set; }

    /// <summary>
    /// User Navigation Property
    /// </summary>
    public virtual User User { get; set; }

    /// <summary>
    /// وضعیت فعال/غیرفعال عضویت
    /// </summary>
    public bool IsActive { get; set; }

    // === v5: First/Last Activation Tracking (Q21) ===

    /// <summary>
    /// اولین فعال‌سازی — فقط یک بار ست می‌شود، هیچ‌وقت overwrite نمی‌شود
    /// </summary>
    public DateTime? FirstActivationDate { get; set; }

    /// <summary>
    /// اولین پکیج خریداری‌شده — فقط یک بار ست می‌شود
    /// </summary>
    public long? FirstPackageId { get; set; }

    /// <summary>
    /// FirstPackage Navigation Property
    /// </summary>
    public virtual Package? FirstPackage { get; set; }

    /// <summary>
    /// آخرین/جاری فعال‌سازی — هر خرید مجدد بروزرسانی می‌شود
    /// مبنای تشخیص "فعال‌شدگان این هفته" (Q22)
    /// </summary>
    public DateTime? LastActivationDate { get; set; }

    /// <summary>
    /// آخرین/جاری پکیج — هر خرید مجدد بروزرسانی می‌شود
    /// مبنای carryover per-package (Q23)
    /// </summary>
    public long? LastPackageId { get; set; }

    /// <summary>
    /// LastPackage Navigation Property
    /// </summary>
    public virtual Package? LastPackage { get; set; }

    /// <summary>
    /// [DEPRECATED] تاریخ فعال‌سازی — جایگزین با FirstActivationDate + LastActivationDate
    /// حفظ موقت برای backward compatibility
    /// </summary>
    [Obsolete("Use FirstActivationDate / LastActivationDate instead")]
    public DateTime? ActivatedAt { get; set; }

    /// <summary>
    /// مبلغ اولیه پرداختی برای فعال‌سازی (معمولاً ۲۵ میلیون تومان)
    /// </summary>
    public long InitialContribution { get; set; }

    /// <summary>
    /// ارزش هدیه حق عضویت باشگاه (25,200,000 تومان)
    /// این مبلغ از کیف پول کاربر کم نمی‌شود و صرفاً هدیه است
    /// </summary>
    public long GiftValue { get; set; }

    /// <summary>
    /// مجموع درآمد کارمزد تاکنون (ریال)
    /// </summary>
    public long TotalEarned { get; set; }

    /// <summary>
    /// نحوه خرید پکیج که منجر به فعالسازی باشگاه شد
    /// </summary>
    public PackagePurchaseMethod PurchaseMethod { get; set; }

    /// <summary>
    /// UserClubFeature Collection Navigation Reference
    /// </summary>
    public virtual ICollection<UserClubFeature>? UserClubFeatures { get; set; }

    /// <summary>
    /// ClubMembershipHistory Collection Navigation Reference
    /// </summary>
    public virtual ICollection<ClubMembershipHistory>? ClubMembershipHistories { get; set; }

    /// <summary>
    /// دوره‌های خرید پکیج — هر خرید پکیج یک Cycle جدید
    /// </summary>
    public virtual ICollection<ClubMembershipCycle>? Cycles { get; set; }
}
