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

namespace TakeoutSaaS.Application.App.Products.Commands;

/// <summary>
/// 更新商品命令。
/// </summary>
public sealed record UpdateProductCommand : IRequest<ProductDto?>
{
    /// <summary>
    /// 商品 ID。
    /// </summary>
    public long ProductId { get; init; }

    /// <summary>
    /// 门店 ID。
    /// </summary>
    public long StoreId { get; init; }

    /// <summary>
    /// 分类 ID。
    /// </summary>
    public long CategoryId { get; init; }

    /// <summary>
    /// 商品编码。
    /// </summary>
    public string SpuCode { get; init; } = string.Empty;

    /// <summary>
    /// 名称。
    /// </summary>
    public string Name { get; init; } = string.Empty;

    /// <summary>
    /// 副标题。
    /// </summary>
    public string? Subtitle { get; init; }

    /// <summary>
    /// 单位。
    /// </summary>
    public string? Unit { get; init; }

    /// <summary>
    /// 现价。
    /// </summary>
    public decimal Price { get; init; }

    /// <summary>
    /// 原价。
    /// </summary>
    public decimal? OriginalPrice { get; init; }

    /// <summary>
    /// 库存数量。
    /// </summary>
    public int? StockQuantity { get; init; }

    /// <summary>
    /// 每单限购。
    /// </summary>
    public int? MaxQuantityPerOrder { get; init; }

    /// <summary>
    /// 状态。
    /// </summary>
    public ProductStatus Status { get; init; } = ProductStatus.Draft;

    /// <summary>
    /// 主图。
    /// </summary>
    public string? CoverImage { get; init; }

    /// <summary>
    /// 图集。
    /// </summary>
    public string? GalleryImages { get; init; }

    /// <summary>
    /// 描述。
    /// </summary>
    public string? Description { get; init; }

    /// <summary>
    /// 支持堂食。
    /// </summary>
    public bool EnableDineIn { get; init; } = true;

    /// <summary>
    /// 支持自提。
    /// </summary>
    public bool EnablePickup { get; init; } = true;

    /// <summary>
    /// 支持配送。
    /// </summary>
    public bool EnableDelivery { get; init; } = true;

    /// <summary>
    /// 是否推荐。
    /// </summary>
    public bool IsFeatured { get; init; }
}
