// EN: Transaction type enumeration for inventory operations.
// VI: Enumeration loại giao dịch cho thao tác tồn kho.

using InventoryService.Domain.SeedWork;

namespace InventoryService.Domain.AggregatesModel.InventoryAggregate;

/// <summary>
/// EN: Transaction type enumeration for inventory movements.
/// VI: Enumeration loại giao dịch cho di chuyển tồn kho.
/// </summary>
public class TransactionType : Enumeration
{
    /// <summary>
    /// EN: Stock in - receiving inventory.
    /// VI: Nhập kho - nhận hàng vào kho.
    /// </summary>
    public static readonly TransactionType In = new(1, nameof(In));
    
    /// <summary>
    /// EN: Stock out - releasing inventory.
    /// VI: Xuất kho - xuất hàng ra khỏi kho.
    /// </summary>
    public static readonly TransactionType Out = new(2, nameof(Out));
    
    /// <summary>
    /// EN: Manual adjustment - stocktake corrections.
    /// VI: Điều chỉnh thủ công - hiệu chỉnh kiểm kê.
    /// </summary>
    public static readonly TransactionType Adjustment = new(3, nameof(Adjustment));
    
    /// <summary>
    /// EN: Reserve for order.
    /// VI: Đặt trước cho đơn hàng.
    /// </summary>
    public static readonly TransactionType Reserve = new(4, nameof(Reserve));
    
    /// <summary>
    /// EN: Release reservation.
    /// VI: Giải phóng đặt trước.
    /// </summary>
    public static readonly TransactionType Release = new(5, nameof(Release));

    /// <summary>
    /// EN: Wastage/shrinkage - damaged, expired, spilled items.
    /// VI: Hao hụt - hàng hư hỏng, hết hạn, đổ tràn.
    /// </summary>
    public static readonly TransactionType Wastage = new(6, nameof(Wastage));

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