namespace CMSMicroservice.Application.InventoryItemCQ.Commands.ReduceInventory;

/// <summary>
/// Command برای کم کردن موجودی (فروش، خسارت، مفقودی و ...)
/// </summary>
public record ReduceInventoryCommand : IRequest<ReduceInventoryResponseDto>
{
    /// <summary>شناسه آیتم موجودی</summary>
    public long Id { get; init; }
    /// <summary>تعداد کاهش</summary>
    public int Quantity { get; init; }
    /// <summary>شناسه سفارش عادی</summary>
    public long? OrderId { get; init; }
    /// <summary>شناسه سفارش تخفیفی</summary>
    public long? DiscountOrderId { get; init; }
    /// <summary>شماره مرجع</summary>
    public string? ReferenceNumber { get; init; }
    /// <summary>شناسه کاربر انجام‌دهنده</summary>
    public long? PerformedByUserId { get; init; }
    /// <summary>آیا از موجودی رزرو شده کم شود؟</summary>
    public bool FromReserved { get; init; } = true;
    /// <summary>نوع حرکت انبار (پیش‌فرض: فروش)</summary>
    public Domain.Enums.StockMovementType MovementType { get; init; } = Domain.Enums.StockMovementType.Sale;
    /// <summary>توضیحات</summary>
    public string? Note { get; init; }
}
