namespace WalletService.Domain.AggregatesModel.WalletAggregate;

using WalletService.Domain.SeedWork;

/// <summary>
/// EN: Hold status enumeration for escrow operations.
/// VI: Enumeration trạng thái giữ cho các thao tác ký quỹ.
/// </summary>
public class HoldStatus : Enumeration
{
    /// <summary>
    /// EN: Hold is active - amount is locked.
    /// VI: Hold đang hoạt động - số tiền bị khóa.
    /// </summary>
    public static HoldStatus Active = new(1, nameof(Active));

    /// <summary>
    /// EN: Hold is partially released - some amount returned.
    /// VI: Hold đã được giải phóng một phần - một số tiền đã được trả lại.
    /// </summary>
    public static HoldStatus PartiallyReleased = new(2, nameof(PartiallyReleased));

    /// <summary>
    /// EN: Hold is fully released - all amount returned.
    /// VI: Hold đã được giải phóng hoàn toàn - tất cả số tiền đã được trả lại.
    /// </summary>
    public static HoldStatus Released = new(3, nameof(Released));

    /// <summary>
    /// EN: Hold is executed - amount transferred to recipient.
    /// VI: Hold đã được thực thi - số tiền đã chuyển cho người nhận.
    /// </summary>
    public static HoldStatus Executed = new(4, nameof(Executed));

    /// <summary>
    /// EN: Hold is cancelled - operation aborted.
    /// VI: Hold đã bị hủy - thao tác đã bị hủy bỏ.
    /// </summary>
    public static HoldStatus Cancelled = new(5, nameof(Cancelled));

    protected HoldStatus() : base(0, "Unknown") { }

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