namespace CMSMicroservice.Domain.Entities.History;

/// <summary>
/// تاریخچه تغییرات دوره عضویت باشگاه (Q27)
/// هر بار تغییر وضعیت چرخه (شروع، ورود/خروج جادویی، تکمیل)، یک رکورد ذخیره می‌شود.
/// </summary>
public class ClubMembershipCycleHistory : BaseAuditableEntity
{
    /// <summary>
    /// شناسه چرخه
    /// </summary>
    public long ClubMembershipCycleId { get; set; }

    /// <summary>
    /// ClubMembershipCycle Navigation Property
    /// </summary>
    public virtual Club.ClubMembershipCycle? ClubMembershipCycle { get; set; }

    /// <summary>
    /// شناسه کاربر
    /// </summary>
    public long UserId { get; set; }

    /// <summary>
    /// شماره دور
    /// </summary>
    public int CycleNumber { get; set; }

    /// <summary>
    /// IsCurrentCycle قبل از تغییر
    /// </summary>
    public bool OldIsCurrentCycle { get; set; }

    /// <summary>
    /// IsCurrentCycle بعد از تغییر
    /// </summary>
    public bool NewIsCurrentCycle { get; set; }

    /// <summary>
    /// تاریخ شروع جادویی قبل از تغییر
    /// </summary>
    public DateTime? OldMagicStartedAt { get; set; }

    /// <summary>
    /// تاریخ شروع جادویی بعد از تغییر
    /// </summary>
    public DateTime? NewMagicStartedAt { get; set; }

    /// <summary>
    /// تاریخ تکمیل جادویی قبل از تغییر
    /// </summary>
    public DateTime? OldMagicCompletedAt { get; set; }

    /// <summary>
    /// تاریخ تکمیل جادویی بعد از تغییر
    /// </summary>
    public DateTime? NewMagicCompletedAt { get; set; }

    /// <summary>
    /// نوع عملیات
    /// </summary>
    public ClubMembershipCycleAction Action { get; set; }

    /// <summary>
    /// چه کسی انجام داده (UserId یا "System")
    /// </summary>
    public string? PerformedBy { get; set; }

    /// <summary>
    /// دلیل تغییر (اختیاری)
    /// </summary>
    public string? Reason { get; set; }
}
