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

namespace TakeoutSaaS.Application.App.Products.Commands;

/// <summary>
/// 商品沽清命令。
/// </summary>
public sealed class SoldoutProductCommand : IRequest<ProductDto?>
{
    /// <summary>
    /// 商品 ID。
    /// </summary>
    public long ProductId { get; init; }

    /// <summary>
    /// 沽清模式。
    /// </summary>
    public ProductSoldoutMode Mode { get; init; } = ProductSoldoutMode.Today;

    /// <summary>
    /// 剩余可售库存。
    /// </summary>
    public int RemainStock { get; init; }

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

    /// <summary>
    /// 恢复时间（定时沽清）。
    /// </summary>
    public DateTime? RecoverAt { get; init; }

    /// <summary>
    /// 是否同步平台。
    /// </summary>
    public bool SyncToPlatform { get; init; } = true;

    /// <summary>
    /// 是否通知店长。
    /// </summary>
    public bool NotifyManager { get; init; }
}
