namespace PromotionService.Domain.AggregatesModel.CampaignAggregate;

using PromotionService.Domain.SeedWork;

/// <summary>
/// EN: Status of a voucher in its lifecycle.
/// VI: Trạng thái của voucher trong vòng đời.
/// </summary>
public class VoucherStatus : Enumeration
{
    /// <summary>
    /// EN: Available - voucher is not claimed yet.
    /// VI: Sẵn sàng - voucher chưa được nhận.
    /// </summary>
    public static readonly VoucherStatus Available = new(1, nameof(Available));

    /// <summary>
    /// EN: Claimed - voucher is owned by a user.
    /// VI: Đã nhận - voucher thuộc về người dùng.
    /// </summary>
    public static readonly VoucherStatus Claimed = new(2, nameof(Claimed));

    /// <summary>
    /// EN: Partially redeemed - some value has been used.
    /// VI: Đã dùng một phần - một phần giá trị đã được sử dụng.
    /// </summary>
    public static readonly VoucherStatus PartiallyRedeemed = new(3, nameof(PartiallyRedeemed));

    /// <summary>
    /// EN: Fully redeemed - all value has been used.
    /// VI: Đã dùng hết - toàn bộ giá trị đã được sử dụng.
    /// </summary>
    public static readonly VoucherStatus FullyRedeemed = new(4, nameof(FullyRedeemed));

    /// <summary>
    /// EN: Expired - voucher has expired without full use.
    /// VI: Hết hạn - voucher đã hết hạn mà chưa dùng hết.
    /// </summary>
    public static readonly VoucherStatus Expired = new(5, nameof(Expired));

    protected VoucherStatus() : base(0, "Unknown") { }
    public VoucherStatus(int id, string name) : base(id, name) { }
}
