// EN: Product Data Transfer Object for read operations.
// VI: DTO Product cho các thao tác đọc.

namespace CatalogService.API.Application.DTOs;

/// <summary>
/// EN: Product DTO for API responses.
/// VI: DTO Product cho API response.
/// </summary>
public record ProductDto
{
    /// <summary>
    /// EN: Product ID.
    /// VI: ID sản phẩm.
    /// </summary>
    public Guid Id { get; init; }

    /// <summary>
    /// EN: Shop ID that owns this product.
    /// VI: ID shop 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 dictionary.
    /// VI: Thuộc tính theo loại dưới dạng dictionary.
    /// </summary>
    public Dictionary<string, object>? Attributes { get; init; }

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

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

    /// <summary>
    /// EN: Is product active.
    /// VI: Sản phẩm có đang hoạt động không.
    /// </summary>
    public bool IsActive { get; init; }

    /// <summary>
    /// EN: Creation timestamp.
    /// VI: Thời gian tạo.
    /// </summary>
    public DateTime CreatedAt { get; init; }

    /// <summary>
    /// EN: Last update timestamp.
    /// VI: Thời gian cập nhật cuối.
    /// </summary>
    public DateTime? UpdatedAt { get; init; }
}
