namespace CMSMicroservice.Domain.Entities.History;

/// <summary>
/// تاریخچه تغییرات پکیج (Q27)
/// هر بار تغییر قیمت، تنظیمات جادویی یا کمیسیون، یک رکورد ذخیره می‌شود.
/// </summary>
public class PackageHistory : BaseAuditableEntity
{
    /// <summary>
    /// شناسه پکیج
    /// </summary>
    public long PackageId { get; set; }

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

    /// <summary>
    /// قیمت قبل از تغییر (ریال)
    /// </summary>
    public long? OldPrice { get; set; }

    /// <summary>
    /// قیمت بعد از تغییر (ریال)
    /// </summary>
    public long? NewPrice { get; set; }

    /// <summary>
    /// سهم Commission Pool قبل از تغییر
    /// </summary>
    public long? OldActivationFee { get; set; }

    /// <summary>
    /// سهم Commission Pool بعد از تغییر
    /// </summary>
    public long? NewActivationFee { get; set; }

    /// <summary>
    /// ضریب جادویی قبل از تغییر
    /// </summary>
    public decimal? OldMagicMultiplier { get; set; }

    /// <summary>
    /// ضریب جادویی بعد از تغییر
    /// </summary>
    public decimal? NewMagicMultiplier { get; set; }

    /// <summary>
    /// سقف شارژ جادویی قبل از تغییر
    /// </summary>
    public long? OldMagicMaxDeposit { get; set; }

    /// <summary>
    /// سقف شارژ جادویی بعد از تغییر
    /// </summary>
    public long? NewMagicMaxDeposit { get; set; }

    /// <summary>
    /// سقف تعادل هر پا قبل از تغییر
    /// </summary>
    public int? OldMaxBalancesPerLeg { get; set; }

    /// <summary>
    /// سقف تعادل هر پا بعد از تغییر
    /// </summary>
    public int? NewMaxBalancesPerLeg { get; set; }

    /// <summary>
    /// وضعیت فعال قبل از تغییر
    /// </summary>
    public bool? OldIsActive { get; set; }

    /// <summary>
    /// وضعیت فعال بعد از تغییر
    /// </summary>
    public bool? NewIsActive { get; set; }

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

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

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