using MediatR;
using TakeoutSaaS.Application.App.Inventory.Dto;
using TakeoutSaaS.Domain.Inventory.Enums;

namespace TakeoutSaaS.Application.App.Inventory.Commands;

/// <summary>
/// 库存调整命令。
/// </summary>
public sealed record AdjustInventoryCommand : IRequest<InventoryItemDto>
{
    /// <summary>
    /// 门店 ID。
    /// </summary>
    public long StoreId { get; init; }

    /// <summary>
    /// SKU ID。
    /// </summary>
    public long ProductSkuId { get; init; }

    /// <summary>
    /// 调整数量，正数入库，负数出库。
    /// </summary>
    public int QuantityDelta { get; init; }

    /// <summary>
    /// 调整类型。
    /// </summary>
    public InventoryAdjustmentType AdjustmentType { get; init; } = InventoryAdjustmentType.Manual;

    /// <summary>
    /// 原因说明。
    /// </summary>
    public string? Reason { get; init; }

    /// <summary>
    /// 安全库存阈值（可选）。
    /// </summary>
    public int? SafetyStock { get; init; }

    /// <summary>
    /// 是否售罄标记。
    /// </summary>
    public bool? IsSoldOut { get; init; }
}
