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

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

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

        [BsonElement("_drive"), BsonRepresentation(BsonType.ObjectId), JsonPropertyName("drive")]
        public string? Drive { 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("label")]
        public string? Label { get; set; }

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

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

        [BsonElement("size")]
        public ulong? Size { get; set; }

        [BsonElement("freespace")]
        public ulong? FreeSpace { get; set; }

        [BsonElement("type")]
        public string? Type { get; set; }

        [BsonElement("filesystem")]
        public string? FileSystem { get; set; }

        [BsonElement("compressed")]
        public bool? Compressed { get; set; }

        [BsonElement("bootable")]
        public bool? Bootable { get; set; }

        [BsonElement("primary")]
        public bool? Primary { get; set; }

        [BsonElement("boot")]
        public bool? Boot { get; set; }

        [BsonElement("blocksize")]
        public ulong? BlockSize { get; set; }

        [BsonElement("blocks")]
        public ulong? Blocks { get; set; }

        [BsonElement("startoffset")]
        public ulong? StartingOffset { get; set; }

        [BsonElement("provider")]
        public string? Provider { get; set; }
    }
}