/*
 * 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>
    /// GetNodesSingleCertificatesInfo200ResponseDataInner
    /// </summary>
    [DataContract(Name = "getNodesSingleCertificatesInfo_200_response_data_inner")]
    public partial class GetNodesSingleCertificatesInfo200ResponseDataInner : IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="GetNodesSingleCertificatesInfo200ResponseDataInner" /> class.
        /// </summary>
        /// <param name="filename">filename.</param>
        /// <param name="fingerprint">Certificate SHA 256 fingerprint..</param>
        /// <param name="issuer">Certificate issuer name..</param>
        /// <param name="notafter">Certificate&#39;s notAfter timestamp (UNIX epoch)..</param>
        /// <param name="notbefore">Certificate&#39;s notBefore timestamp (UNIX epoch)..</param>
        /// <param name="pem">Certificate in PEM format.</param>
        /// <param name="publicKeyBits">Certificate&#39;s public key size.</param>
        /// <param name="publicKeyType">Certificate&#39;s public key algorithm.</param>
        /// <param name="san">List of Certificate&#39;s SubjectAlternativeName entries..</param>
        /// <param name="subject">Certificate subject name..</param>
        public GetNodesSingleCertificatesInfo200ResponseDataInner(string filename = default(string), string fingerprint = default(string), string issuer = default(string), Int64 notafter = default(Int64), Int64 notbefore = default(Int64), string pem = default(string), Int64 publicKeyBits = default(Int64), string publicKeyType = default(string), List<string> san = default(List<string>), string subject = default(string))
        {
            this.Filename = filename;
            this.Fingerprint = fingerprint;
            this.Issuer = issuer;
            this.Notafter = notafter;
            this.Notbefore = notbefore;
            this.Pem = pem;
            this.PublicKeyBits = publicKeyBits;
            this.PublicKeyType = publicKeyType;
            this.San = san;
            this.Subject = subject;
        }

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

        /// <summary>
        /// Certificate SHA 256 fingerprint.
        /// </summary>
        /// <value>Certificate SHA 256 fingerprint.</value>
        [DataMember(Name = "fingerprint", EmitDefaultValue = false)]
        public string Fingerprint { get; set; }

        /// <summary>
        /// Certificate issuer name.
        /// </summary>
        /// <value>Certificate issuer name.</value>
        [DataMember(Name = "issuer", EmitDefaultValue = false)]
        public string Issuer { get; set; }

        /// <summary>
        /// Certificate&#39;s notAfter timestamp (UNIX epoch).
        /// </summary>
        /// <value>Certificate&#39;s notAfter timestamp (UNIX epoch).</value>
        [DataMember(Name = "notafter", EmitDefaultValue = false)]
        public Int64 Notafter { get; set; }

        /// <summary>
        /// Certificate&#39;s notBefore timestamp (UNIX epoch).
        /// </summary>
        /// <value>Certificate&#39;s notBefore timestamp (UNIX epoch).</value>
        [DataMember(Name = "notbefore", EmitDefaultValue = false)]
        public Int64 Notbefore { get; set; }

        /// <summary>
        /// Certificate in PEM format
        /// </summary>
        /// <value>Certificate in PEM format</value>
        [DataMember(Name = "pem", EmitDefaultValue = false)]
        public string Pem { get; set; }

        /// <summary>
        /// Certificate&#39;s public key size
        /// </summary>
        /// <value>Certificate&#39;s public key size</value>
        [DataMember(Name = "public-key-bits", EmitDefaultValue = false)]
        public Int64 PublicKeyBits { get; set; }

        /// <summary>
        /// Certificate&#39;s public key algorithm
        /// </summary>
        /// <value>Certificate&#39;s public key algorithm</value>
        [DataMember(Name = "public-key-type", EmitDefaultValue = false)]
        public string PublicKeyType { get; set; }

        /// <summary>
        /// List of Certificate&#39;s SubjectAlternativeName entries.
        /// </summary>
        /// <value>List of Certificate&#39;s SubjectAlternativeName entries.</value>
        [DataMember(Name = "san", EmitDefaultValue = false)]
        public List<string> San { get; set; }

        /// <summary>
        /// Certificate subject name.
        /// </summary>
        /// <value>Certificate subject name.</value>
        [DataMember(Name = "subject", EmitDefaultValue = false)]
        public string Subject { 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 GetNodesSingleCertificatesInfo200ResponseDataInner {\n");
            sb.Append("  Filename: ").Append(Filename).Append("\n");
            sb.Append("  Fingerprint: ").Append(Fingerprint).Append("\n");
            sb.Append("  Issuer: ").Append(Issuer).Append("\n");
            sb.Append("  Notafter: ").Append(Notafter).Append("\n");
            sb.Append("  Notbefore: ").Append(Notbefore).Append("\n");
            sb.Append("  Pem: ").Append(Pem).Append("\n");
            sb.Append("  PublicKeyBits: ").Append(PublicKeyBits).Append("\n");
            sb.Append("  PublicKeyType: ").Append(PublicKeyType).Append("\n");
            sb.Append("  San: ").Append(San).Append("\n");
            sb.Append("  Subject: ").Append(Subject).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;
        }
    }

}
