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

namespace TakeoutSaaS.Application.App.Deliveries.Dto;

/// <summary>
/// 配送事件 DTO。
/// </summary>
public sealed class DeliveryEventDto
{
    /// <summary>
    /// 事件 ID。
    /// </summary>
    [JsonConverter(typeof(SnowflakeIdJsonConverter))]
    public long Id { get; init; }

    /// <summary>
    /// 配送单 ID。
    /// </summary>
    [JsonConverter(typeof(SnowflakeIdJsonConverter))]
    public long DeliveryOrderId { get; init; }

    /// <summary>
    /// 事件类型。
    /// </summary>
    public DeliveryEventType EventType { get; init; }

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

    /// <summary>
    /// 事件时间。
    /// </summary>
    public DateTime OccurredAt { get; init; }

    /// <summary>
    /// 原始载荷。
    /// </summary>
    public string? Payload { get; init; }
}
