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

namespace TakeoutSaaS.Application.App.Products.Commands;

/// <summary>
/// 创建商品命令。
/// </summary>
public sealed class CreateProductCommand : IRequest<ProductDto>
{
    /// <summary>
    /// 门店 ID。
    /// </summary>
    public long StoreId { get; set; }

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

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

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

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

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

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

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

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

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

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

    /// <summary>
    /// 商品类型。
    /// </summary>
    public ProductKind Kind { get; set; } = ProductKind.Single;

    /// <summary>
    /// 月销量。
    /// </summary>
    public int SalesMonthly { get; set; }

    /// <summary>
    /// 标签 JSON。
    /// </summary>
    public string? TagsJson { get; set; }

    /// <summary>
    /// 沽清模式。
    /// </summary>
    public ProductSoldoutMode? SoldoutMode { get; set; }

    /// <summary>
    /// 沽清恢复时间。
    /// </summary>
    public DateTime? RecoverAt { get; set; }

    /// <summary>
    /// 沽清后剩余可售库存。
    /// </summary>
    public int? RemainStock { get; set; }

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

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

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

    /// <summary>
    /// 定时上架时间。
    /// </summary>
    public DateTime? TimedOnShelfAt { get; set; }

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

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

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

    /// <summary>
    /// 排序权重。
    /// </summary>
    public int SortWeight { get; set; }

    /// <summary>
    /// 库存预警值。
    /// </summary>
    public int? WarningStock { get; set; }

    /// <summary>
    /// 打包费。
    /// </summary>
    public decimal? PackingFee { get; set; }

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

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

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

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