using System.Text.Json.Serialization;
using TakeoutSaaS.Domain.Products.Enums;
using TakeoutSaaS.Shared.Abstractions.Serialization;

namespace TakeoutSaaS.Application.App.Products.Dto;

/// <summary>
/// 商品 DTO（含 SPU 基础信息）。
/// </summary>
public sealed class ProductDto
{
    /// <summary>
    /// 商品 ID。
    /// </summary>
    [JsonConverter(typeof(SnowflakeIdJsonConverter))]
    public long Id { get; init; }

    /// <summary>
    /// 租户 ID。
    /// </summary>
    [JsonConverter(typeof(SnowflakeIdJsonConverter))]
    public long TenantId { get; init; }

    /// <summary>
    /// 门店 ID。
    /// </summary>
    [JsonConverter(typeof(SnowflakeIdJsonConverter))]
    public long StoreId { get; init; }

    /// <summary>
    /// 分类 ID。
    /// </summary>
    [JsonConverter(typeof(SnowflakeIdJsonConverter))]
    public long CategoryId { get; init; }

    /// <summary>
    /// SPU 编码。
    /// </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; }

    /// <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; }

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

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

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

    /// <summary>
    /// 创建时间。
    /// </summary>
    public DateTime CreatedAt { get; init; }
}
