// EN: Command to create a new product.
// VI: Command để tạo sản phẩm mới.

using MediatR;

namespace CatalogService.API.Application.Commands;

/// <summary>
/// EN: Command to create a new product.
/// VI: Command để tạo sản phẩm mới.
/// </summary>
public record CreateProductCommand : IRequest<Guid>
{
    /// <summary>
    /// EN: Shop ID that will own this product.
    /// VI: ID shop sẽ sở hữu sản phẩm.
    /// </summary>
    public Guid ShopId { get; init; }

    /// <summary>
    /// EN: Product name.
    /// VI: Tên sản phẩm.
    /// </summary>
    public string Name { get; init; } = string.Empty;

    /// <summary>
    /// EN: Product description.
    /// VI: Mô tả sản phẩm.
    /// </summary>
    public string? Description { get; init; }

    /// <summary>
    /// EN: Product price.
    /// VI: Giá sản phẩm.
    /// </summary>
    public decimal Price { get; init; }

    /// <summary>
    /// EN: Product type (Physical, Service, PreparedFood).
    /// VI: Loại sản phẩm (Physical, Service, PreparedFood).
    /// </summary>
    public string Type { get; init; } = string.Empty;

    /// <summary>
    /// EN: Type-specific attributes as JSON.
    /// VI: Thuộc tính theo loại dưới dạng JSON.
    /// </summary>
    public Dictionary<string, object>? Attributes { get; init; }

    /// <summary>
    /// EN: Stock Keeping Unit.
    /// VI: Mã SKU.
    /// </summary>
    public string? Sku { get; init; }

    /// <summary>
    /// EN: Product image URL.
    /// VI: URL hình ảnh sản phẩm.
    /// </summary>
    public string? ImageUrl { get; init; }
}
