namespace WalletService.Domain.AggregatesModel.PaymentAggregate;

using WalletService.Domain.SeedWork;

/// <summary>
/// EN: Payment status enumeration using type-safe enum pattern.
/// VI: Enumeration trang thai thanh toan su dung pattern enum an toan kieu.
/// </summary>
public class PaymentStatus : Enumeration
{
    /// <summary>
    /// EN: Payment has been created but not yet processed.
    /// VI: Thanh toan da duoc tao nhung chua xu ly.
    /// </summary>
    public static PaymentStatus Pending = new(1, nameof(Pending));

    /// <summary>
    /// EN: Payment is being processed by the gateway.
    /// VI: Thanh toan dang duoc xu ly boi cong thanh toan.
    /// </summary>
    public static PaymentStatus Processing = new(2, nameof(Processing));

    /// <summary>
    /// EN: Payment has been completed successfully.
    /// VI: Thanh toan da hoan thanh thanh cong.
    /// </summary>
    public static PaymentStatus Completed = new(3, nameof(Completed));

    /// <summary>
    /// EN: Payment has failed.
    /// VI: Thanh toan da that bai.
    /// </summary>
    public static PaymentStatus Failed = new(4, nameof(Failed));

    /// <summary>
    /// EN: Payment has been refunded.
    /// VI: Thanh toan da duoc hoan tien.
    /// </summary>
    public static PaymentStatus Refunded = new(5, nameof(Refunded));

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