/*
 * ProxMox VE API
 *
 * ProxMox VE API
 *
 * The version of the OpenAPI document: 2.0
 * Contact: support@lumaserv.com
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = ProxmoxSharp.Client.OpenAPIDateConverter;

namespace ProxmoxSharp.Model
{
    /// <summary>
    /// GetNodesSingleHardwarePci200ResponseDataInner
    /// </summary>
    [DataContract(Name = "getNodesSingleHardwarePci_200_response_data_inner")]
    public partial class GetNodesSingleHardwarePci200ResponseDataInner : IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="GetNodesSingleHardwarePci200ResponseDataInner" /> class.
        /// </summary>
        /// <param name="varClass">The PCI Class of the device..</param>
        /// <param name="device">The Device ID..</param>
        /// <param name="deviceName">deviceName.</param>
        /// <param name="id">The PCI ID..</param>
        /// <param name="iommugroup">The IOMMU group in which the device is in. If no IOMMU group is detected, it is set to -1..</param>
        /// <param name="mdev">If set, marks that the device is capable of creating mediated devices..</param>
        /// <param name="subsystemDevice">The Subsystem Device ID..</param>
        /// <param name="subsystemDeviceName">subsystemDeviceName.</param>
        /// <param name="subsystemVendor">The Subsystem Vendor ID..</param>
        /// <param name="subsystemVendorName">subsystemVendorName.</param>
        /// <param name="vendor">The Vendor ID..</param>
        /// <param name="vendorName">vendorName.</param>
        public GetNodesSingleHardwarePci200ResponseDataInner(string varClass = default(string), string device = default(string), string deviceName = default(string), string id = default(string), Int64 iommugroup = default(Int64), Int64 mdev = default(Int64), string subsystemDevice = default(string), string subsystemDeviceName = default(string), string subsystemVendor = default(string), string subsystemVendorName = default(string), string vendor = default(string), string vendorName = default(string))
        {
            this.Class = varClass;
            this.Device = device;
            this.DeviceName = deviceName;
            this.Id = id;
            this.Iommugroup = iommugroup;
            this.Mdev = mdev;
            this.SubsystemDevice = subsystemDevice;
            this.SubsystemDeviceName = subsystemDeviceName;
            this.SubsystemVendor = subsystemVendor;
            this.SubsystemVendorName = subsystemVendorName;
            this.Vendor = vendor;
            this.VendorName = vendorName;
        }

        /// <summary>
        /// The PCI Class of the device.
        /// </summary>
        /// <value>The PCI Class of the device.</value>
        [DataMember(Name = "class", EmitDefaultValue = false)]
        public string Class { get; set; }

        /// <summary>
        /// The Device ID.
        /// </summary>
        /// <value>The Device ID.</value>
        [DataMember(Name = "device", EmitDefaultValue = false)]
        public string Device { get; set; }

        /// <summary>
        /// Gets or Sets DeviceName
        /// </summary>
        [DataMember(Name = "device_name", EmitDefaultValue = false)]
        public string DeviceName { get; set; }

        /// <summary>
        /// The PCI ID.
        /// </summary>
        /// <value>The PCI ID.</value>
        [DataMember(Name = "id", EmitDefaultValue = false)]
        public string Id { get; set; }

        /// <summary>
        /// The IOMMU group in which the device is in. If no IOMMU group is detected, it is set to -1.
        /// </summary>
        /// <value>The IOMMU group in which the device is in. If no IOMMU group is detected, it is set to -1.</value>
        [DataMember(Name = "iommugroup", EmitDefaultValue = false)]
        public Int64 Iommugroup { get; set; }

        /// <summary>
        /// If set, marks that the device is capable of creating mediated devices.
        /// </summary>
        /// <value>If set, marks that the device is capable of creating mediated devices.</value>
        [DataMember(Name = "mdev", EmitDefaultValue = false)]
        public Int64 Mdev { get; set; }

        /// <summary>
        /// The Subsystem Device ID.
        /// </summary>
        /// <value>The Subsystem Device ID.</value>
        [DataMember(Name = "subsystem_device", EmitDefaultValue = false)]
        public string SubsystemDevice { get; set; }

        /// <summary>
        /// Gets or Sets SubsystemDeviceName
        /// </summary>
        [DataMember(Name = "subsystem_device_name", EmitDefaultValue = false)]
        public string SubsystemDeviceName { get; set; }

        /// <summary>
        /// The Subsystem Vendor ID.
        /// </summary>
        /// <value>The Subsystem Vendor ID.</value>
        [DataMember(Name = "subsystem_vendor", EmitDefaultValue = false)]
        public string SubsystemVendor { get; set; }

        /// <summary>
        /// Gets or Sets SubsystemVendorName
        /// </summary>
        [DataMember(Name = "subsystem_vendor_name", EmitDefaultValue = false)]
        public string SubsystemVendorName { get; set; }

        /// <summary>
        /// The Vendor ID.
        /// </summary>
        /// <value>The Vendor ID.</value>
        [DataMember(Name = "vendor", EmitDefaultValue = false)]
        public string Vendor { get; set; }

        /// <summary>
        /// Gets or Sets VendorName
        /// </summary>
        [DataMember(Name = "vendor_name", EmitDefaultValue = false)]
        public string VendorName { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class GetNodesSingleHardwarePci200ResponseDataInner {\n");
            sb.Append("  Class: ").Append(Class).Append("\n");
            sb.Append("  Device: ").Append(Device).Append("\n");
            sb.Append("  DeviceName: ").Append(DeviceName).Append("\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  Iommugroup: ").Append(Iommugroup).Append("\n");
            sb.Append("  Mdev: ").Append(Mdev).Append("\n");
            sb.Append("  SubsystemDevice: ").Append(SubsystemDevice).Append("\n");
            sb.Append("  SubsystemDeviceName: ").Append(SubsystemDeviceName).Append("\n");
            sb.Append("  SubsystemVendor: ").Append(SubsystemVendor).Append("\n");
            sb.Append("  SubsystemVendorName: ").Append(SubsystemVendorName).Append("\n");
            sb.Append("  Vendor: ").Append(Vendor).Append("\n");
            sb.Append("  VendorName: ").Append(VendorName).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        IEnumerable<ValidationResult> IValidatableObject.Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}
