// ***********************************************************************
// 
//     Heath
// 
// ***********************************************************************
using Lib.Common.LoggingAPI.Service.Constants;
using System.ComponentModel;
using System.Text.Json.Serialization;
namespace Lib.Common.LoggingAPI.Service.DataTransferObjects.Logger
{
    /// 
    /// The service logger detail object.
    /// 
    /// The generic message type.
    public class LogDetail
    {
        /// 
        /// Gets or sets the log severity.
        /// 
        /// info
        [DisplayName(DisplayNames.Severity)]
        [JsonPropertyName(DisplayNames.Severity)]
        public LogSeverity Severity { get; set; }
        /// 
        /// Gets or sets the timestamp.
        /// 
        [DisplayName(DisplayNames.Timestamp)]
        [JsonPropertyName(DisplayNames.Timestamp)]
        public DateTime Timestamp { get; set; }
        /// 
        /// Gets or sets the environment.
        /// 
        /// Development
        [DisplayName(DisplayNames.Environment)]
        [JsonPropertyName(DisplayNames.Environment)]
        public string? Environment { get; set; }
        /// 
        /// Gets or sets the target.
        /// 
        [DisplayName(DisplayNames.Target)]
        [JsonPropertyName(DisplayNames.Target)]
        public LogTarget? Target { get; set; }
        /// 
        /// Gets or sets the x-forwarded-for header.
        /// 
        /// localhost
        [DisplayName(DisplayNames.XForwardedFor)]
        [JsonPropertyName(DisplayNames.XForwardedFor)]
        public string? XForwardedFor { get; set; }
        /// 
        /// Gets or sets the service identifier. 
        /// 
        /// 
        [DisplayName(DisplayNames.ServiceId)]
        [JsonPropertyName(DisplayNames.ServiceId)]
        public string? ServiceId { get; set; }
        /// 
        /// Gets or sets the request identifier.
        /// 
        /// 
        [DisplayName(DisplayNames.RequestId)]
        [JsonPropertyName(DisplayNames.RequestId)]
        public string? RequestId { get; set; }
        /// 
        /// Gets or sets the client identifier.
        /// 
        /// 
        [DisplayName(DisplayNames.ClientId)]
        [JsonPropertyName(DisplayNames.ClientId)]
        public string? ClientId { get; set; }
        /// 
        /// Gets or sets the client identifier.
        /// 
        /// clientRequest
        [DisplayName(DisplayNames.Operation)]
        [JsonPropertyName(DisplayNames.Operation)]
        public LogOperation Operation { get; set; }
        /// 
        /// Gets or sets the user name.
        /// 
        /// clientRequest
        [DisplayName(DisplayNames.User)]
        [JsonPropertyName(DisplayNames.User)]
        public string? User { get; set; }
        /// 
        /// Gets or sets user's email.
        /// 
        /// clientRequest
        [DisplayName(DisplayNames.Email)]
        [JsonPropertyName(DisplayNames.Email)]
        public string? Email { get; set; }
        /// 
        /// Gets or sets the user identifier.
        /// 
        /// clientRequest
        [DisplayName(DisplayNames.UserId)]
        [JsonPropertyName(DisplayNames.UserId)]
        public string? UserId { get; set; }
        /// 
        /// Gets or sets the message.
        /// 
        /// A custom log message.
        [DisplayName(DisplayNames.Message)]
        [JsonPropertyName(DisplayNames.Message)]
        public TMessage? Message { get; set; }
    }
}