// ***********************************************************************
// 
//     AgileWebs
// 
// ***********************************************************************
using Core.Cerberos.Adapters.Common.Enums;
using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;
using System.Text.Json.Serialization;
namespace Core.Cerberos.Domain.Contexts.Onboarding.Request
{
    /// 
    /// Data transfer object (DTO) for adding modules.
    /// 
    public class ModuleRequest
    {
        /// 
        /// Gets or sets the name of the module.
        /// 
        [BsonElement("name")]
        [BsonRepresentation(BsonType.String)]
        [JsonPropertyName("name")]
        public string Name { get; set; } = null!;
        /// 
        /// Gets or sets the description of the module.
        /// 
        [BsonElement("description")]
        [BsonRepresentation(BsonType.String)]
        [JsonPropertyName("description")]
        public string? Description { get; set; }
        /// 
        /// Gets or sets the icon of the module.
        /// 
        [BsonElement("icon")]
        [BsonRepresentation(BsonType.String)]
        [JsonPropertyName("icon")]
        public string? Icon { get; set; }
        /// 
        /// Gets or sets the route of the module.
        /// 
        [BsonElement("route")]
        [BsonRepresentation(BsonType.String)]
        [JsonPropertyName("route")]
        public string Route { get; set; } = null!;
        /// 
        /// Gets or sets the order of the module.
        /// 
        [BsonElement("order")]
        [BsonRepresentation(BsonType.Int32)]
        [JsonPropertyName("order")]
        public int? Order { get; set; }
        /// 
        /// Gets or sets the application of the module.
        /// 
        [BsonElement("application")]
        [BsonRepresentation(BsonType.String)]
        [JsonPropertyName("application")]
        [JsonConverter(typeof(JsonStringEnumConverter))]
        public ApplicationsEnum? Application { get; set; } = null!;
    }
}