using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;
using System.Text.Json.Serialization;

namespace Insight.Infrastructure.Entities
{
    [BsonIgnoreExtraElements]
    public class HostProcessorEntity
    {
        [BsonId, BsonRepresentation(BsonType.ObjectId), JsonPropertyName("id")]
        public string? Id { get; set; }

        [BsonElement("_host"), BsonRepresentation(BsonType.ObjectId), JsonPropertyName("host")]
        public string? Host { get; set; }

        [BsonElement("_batch"), BsonRepresentation(BsonType.ObjectId), JsonPropertyName("batch")]
        public string? Batch { get; set; }

        [BsonElement("insert")]
        public DateTime? Insert { get; set; }

        [BsonElement("update")]
        public DateTime? Update { get; set; }

        [BsonElement("index")]
        public uint? Index { get; set; }

        [BsonElement("company")]
        public string? Company { get; set; }

        [BsonElement("name")]
        public string? Name { get; set; }

        [BsonElement("socket")]
        public string? Socket { get; set; }

        [BsonElement("serial")]
        public string? Serial { get; set; }

        [BsonElement("version")]
        public string? Version { get; set; }

        [BsonElement("cores")]
        public uint? Cores { get; set; }

        [BsonElement("logicalcores")]
        public uint? LogicalCores { get; set; }

        [BsonElement("clock")]
        public uint? Clock { get; set; }

        [BsonElement("clock_current")]
        public uint? CurrentClock { get; set; }

        [BsonElement("l1")]
        public uint? L1Size { get; set; }

        [BsonElement("l2")]
        public uint? L2Size { get; set; }

        [BsonElement("l3")]
        public uint? L3Size { get; set; }

        [BsonElement("virtualization")]
        public bool? Virtualization { get; set; }

        [BsonElement("pnp")]
        public string? PNP { get; set; }
    }
}