using System.Text.Json;
using System.Text.Json.Serialization;

namespace Health.WebApi.Converters;

/// <summary>
/// 统一 DateTime 序列化为 ISO 8601 UTC 格式（始终带 Z 后缀），
/// 前端解析时可通过 Z 识别为 UTC 时间并自动转本地时间显示。
/// </summary>
public sealed class UtcDateTimeConverter : JsonConverter<DateTime>
{
    public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
        => reader.GetDateTime();

    public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options)
    {
        // 始终按 UTC 写出，带 Z 后缀
        writer.WriteStringValue(value.Kind == DateTimeKind.Local
            ? value.ToUniversalTime()
            : value.Kind == DateTimeKind.Unspecified
                ? DateTime.SpecifyKind(value, DateTimeKind.Utc)
                : value);
    }
}
