using TakeoutSaaS.Domain.Coupons.Enums;
using TakeoutSaaS.Shared.Abstractions.Entities;

namespace TakeoutSaaS.Domain.Coupons.Entities;

/// <summary>
/// 次卡实例（顾客购买后生成）。
/// </summary>
public sealed class PunchCardInstance : MultiTenantEntityBase
{
    /// <summary>
    /// 门店 ID。
    /// </summary>
    public long StoreId { get; set; }

    /// <summary>
    /// 次卡模板 ID。
    /// </summary>
    public long PunchCardTemplateId { get; set; }

    /// <summary>
    /// 实例编号（业务唯一）。
    /// </summary>
    public string InstanceNo { get; set; } = string.Empty;

    /// <summary>
    /// 会员名称。
    /// </summary>
    public string MemberName { get; set; } = string.Empty;

    /// <summary>
    /// 会员手机号（脱敏）。
    /// </summary>
    public string MemberPhoneMasked { get; set; } = string.Empty;

    /// <summary>
    /// 购买时间（UTC）。
    /// </summary>
    public DateTime PurchasedAt { get; set; }

    /// <summary>
    /// 过期时间（UTC，可空）。
    /// </summary>
    public DateTime? ExpiresAt { get; set; }

    /// <summary>
    /// 总次数。
    /// </summary>
    public int TotalTimes { get; set; }

    /// <summary>
    /// 剩余次数。
    /// </summary>
    public int RemainingTimes { get; set; }

    /// <summary>
    /// 实付金额。
    /// </summary>
    public decimal PaidAmount { get; set; }

    /// <summary>
    /// 实例状态。
    /// </summary>
    public PunchCardInstanceStatus Status { get; set; } = PunchCardInstanceStatus.Active;
}
