namespace WalletService.Domain.AggregatesModel.PointAccountAggregate;

using WalletService.Domain.SeedWork;

/// <summary>
/// EN: Point transaction type enumeration
/// VI: Enumeration loại giao dịch điểm
/// </summary>
public class PointTransactionType : Enumeration
{
    /// <summary>
    /// EN: Earn - points added from purchases or promotions
    /// VI: Tích điểm - điểm được thêm từ mua hàng hoặc khuyến mãi
    /// </summary>
    public static PointTransactionType Earn = new(1, nameof(Earn));

    /// <summary>
    /// EN: Spend - points used for purchases or rewards
    /// VI: Tiêu điểm - điểm được sử dụng để mua hàng hoặc đổi thưởng
    /// </summary>
    public static PointTransactionType Spend = new(2, nameof(Spend));

    /// <summary>
    /// EN: Expire - points expired due to inactivity
    /// VI: Hết hạn - điểm hết hạn do không hoạt động
    /// </summary>
    public static PointTransactionType Expire = new(3, nameof(Expire));

    /// <summary>
    /// EN: Adjust - manual adjustment by admin
    /// VI: Điều chỉnh - điều chỉnh thủ công bởi admin
    /// </summary>
    public static PointTransactionType Adjust = new(4, nameof(Adjust));

    /// <summary>
    /// EN: Bonus - bonus points from special promotions
    /// VI: Thưởng - điểm thưởng từ các khuyến mãi đặc biệt
    /// </summary>
    public static PointTransactionType Bonus = new(5, nameof(Bonus));

    public PointTransactionType(int id, string name) : base(id, name) { }
}
