using System.Text.Json;
using System.Text.Json.Serialization;
namespace Mercados.Api.Utils
{
    /// 
    /// Un convertidor de JSON personalizado para asegurar que los objetos DateTime
    /// se serialicen al formato ISO 8601 en UTC (con el designador 'Z').
    /// 
    public class UtcDateTimeConverter : JsonConverter
    {
        /// 
        /// Lee un valor DateTime desde el lector JSON y lo convierte a UTC.
        /// 
        /// El lector JSON.
        /// El tipo a convertir.
        /// Las opciones de serialización JSON.
        /// El valor DateTime en UTC.
        public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
        {
            // Al leer un string de fecha, nos aseguramos de que se interprete como UTC
            return reader.GetDateTime().ToUniversalTime();
        }
        /// 
        /// Escribe un valor DateTime en formato UTC como una cadena en el escritor JSON.
        /// 
        /// El escritor JSON.
        /// El valor DateTime a escribir.
        /// Las opciones de serialización JSON.
                public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options)
                {
                    // Antes de escribir el string, especificamos que el 'Kind' es Utc.
                    // Si ya es Utc, no hace nada. Si es Local o Unspecified, lo trata como si fuera Utc.
                    // Esto es seguro porque sabemos que todas nuestras fechas en la BD son UTC.
                    var utcValue = DateTime.SpecifyKind(value, DateTimeKind.Utc);
                    writer.WriteStringValue(utcValue);
                }
    }
}