/*
 * Certificate Manager Service API
 *
 * Using the Certificate Manager Service, you can conveniently provision and manage SSL certificates  with IONOS services and your internal connected resources.   For the [Application Load Balancer](https://api.ionos.com/docs/cloud/v6/#Application-Load-Balancers-get-datacenters-datacenterId-applicationloadbalancers), you usually need a certificate to encrypt your HTTPS traffic. The service provides the basic functions of uploading and deleting your certificates for this purpose.
 *
 * API version: 2.0
 */

// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.

package ionoscloud

import (
	"encoding/json"
	"time"
)

// MetadataWithCertificateInformationAllOf struct for MetadataWithCertificateInformationAllOf
type MetadataWithCertificateInformationAllOf struct {
	// The ID of the auto-certificate that caused issuing of the certificate.
	AutoCertificate *string `json:"autoCertificate,omitempty"`
	// The ID of the last issued certificate that belongs to the same auto-certificate.
	LastIssuedCertificate *string `json:"lastIssuedCertificate,omitempty"`
	// Indicates if the certificate is expired.
	Expired *bool `json:"expired"`
	// The start date of the certificate.
	NotBefore *IonosTime `json:"notBefore"`
	// The end date of the certificate.
	NotAfter *IonosTime `json:"notAfter"`
	// The serial number of the certificate in hex.
	SerialNumber *string `json:"serialNumber"`
	// The common name (DNS) of the certificate.
	CommonName *string `json:"commonName"`
	// Optional additional names added to the issued certificate. The additional names needs to be part of a zone in IONOS Cloud DNS.
	SubjectAlternativeNames *[]string `json:"subjectAlternativeNames"`
}

// NewMetadataWithCertificateInformationAllOf instantiates a new MetadataWithCertificateInformationAllOf object
// This constructor will assign default values to properties that have it defined,
// and makes sure properties required by API are set, but the set of arguments
// will change when the set of required properties is changed
func NewMetadataWithCertificateInformationAllOf(expired bool, notBefore time.Time, notAfter time.Time, serialNumber string, commonName string, subjectAlternativeNames []string) *MetadataWithCertificateInformationAllOf {
	this := MetadataWithCertificateInformationAllOf{}

	this.Expired = &expired
	this.NotBefore = &IonosTime{notBefore}
	this.NotAfter = &IonosTime{notAfter}
	this.SerialNumber = &serialNumber
	this.CommonName = &commonName
	this.SubjectAlternativeNames = &subjectAlternativeNames

	return &this
}

// NewMetadataWithCertificateInformationAllOfWithDefaults instantiates a new MetadataWithCertificateInformationAllOf object
// This constructor will only assign default values to properties that have it defined,
// but it doesn't guarantee that properties required by API are set
func NewMetadataWithCertificateInformationAllOfWithDefaults() *MetadataWithCertificateInformationAllOf {
	this := MetadataWithCertificateInformationAllOf{}
	return &this
}

// GetAutoCertificate returns the AutoCertificate field value
// If the value is explicit nil, the zero value for string will be returned
func (o *MetadataWithCertificateInformationAllOf) GetAutoCertificate() *string {
	if o == nil {
		return nil
	}

	return o.AutoCertificate

}

// GetAutoCertificateOk returns a tuple with the AutoCertificate field value
// and a boolean to check if the value has been set.
// NOTE: If the value is an explicit nil, `nil, true` will be returned
func (o *MetadataWithCertificateInformationAllOf) GetAutoCertificateOk() (*string, bool) {
	if o == nil {
		return nil, false
	}

	return o.AutoCertificate, true
}

// SetAutoCertificate sets field value
func (o *MetadataWithCertificateInformationAllOf) SetAutoCertificate(v string) {

	o.AutoCertificate = &v

}

// HasAutoCertificate returns a boolean if a field has been set.
func (o *MetadataWithCertificateInformationAllOf) HasAutoCertificate() bool {
	if o != nil && o.AutoCertificate != nil {
		return true
	}

	return false
}

// GetLastIssuedCertificate returns the LastIssuedCertificate field value
// If the value is explicit nil, the zero value for string will be returned
func (o *MetadataWithCertificateInformationAllOf) GetLastIssuedCertificate() *string {
	if o == nil {
		return nil
	}

	return o.LastIssuedCertificate

}

// GetLastIssuedCertificateOk returns a tuple with the LastIssuedCertificate field value
// and a boolean to check if the value has been set.
// NOTE: If the value is an explicit nil, `nil, true` will be returned
func (o *MetadataWithCertificateInformationAllOf) GetLastIssuedCertificateOk() (*string, bool) {
	if o == nil {
		return nil, false
	}

	return o.LastIssuedCertificate, true
}

// SetLastIssuedCertificate sets field value
func (o *MetadataWithCertificateInformationAllOf) SetLastIssuedCertificate(v string) {

	o.LastIssuedCertificate = &v

}

// HasLastIssuedCertificate returns a boolean if a field has been set.
func (o *MetadataWithCertificateInformationAllOf) HasLastIssuedCertificate() bool {
	if o != nil && o.LastIssuedCertificate != nil {
		return true
	}

	return false
}

// GetExpired returns the Expired field value
// If the value is explicit nil, the zero value for bool will be returned
func (o *MetadataWithCertificateInformationAllOf) GetExpired() *bool {
	if o == nil {
		return nil
	}

	return o.Expired

}

// GetExpiredOk returns a tuple with the Expired field value
// and a boolean to check if the value has been set.
// NOTE: If the value is an explicit nil, `nil, true` will be returned
func (o *MetadataWithCertificateInformationAllOf) GetExpiredOk() (*bool, bool) {
	if o == nil {
		return nil, false
	}

	return o.Expired, true
}

// SetExpired sets field value
func (o *MetadataWithCertificateInformationAllOf) SetExpired(v bool) {

	o.Expired = &v

}

// HasExpired returns a boolean if a field has been set.
func (o *MetadataWithCertificateInformationAllOf) HasExpired() bool {
	if o != nil && o.Expired != nil {
		return true
	}

	return false
}

// GetNotBefore returns the NotBefore field value
// If the value is explicit nil, the zero value for time.Time will be returned
func (o *MetadataWithCertificateInformationAllOf) GetNotBefore() *time.Time {
	if o == nil {
		return nil
	}

	if o.NotBefore == nil {
		return nil
	}
	return &o.NotBefore.Time

}

// GetNotBeforeOk returns a tuple with the NotBefore field value
// and a boolean to check if the value has been set.
// NOTE: If the value is an explicit nil, `nil, true` will be returned
func (o *MetadataWithCertificateInformationAllOf) GetNotBeforeOk() (*time.Time, bool) {
	if o == nil {
		return nil, false
	}

	if o.NotBefore == nil {
		return nil, false
	}
	return &o.NotBefore.Time, true

}

// SetNotBefore sets field value
func (o *MetadataWithCertificateInformationAllOf) SetNotBefore(v time.Time) {

	o.NotBefore = &IonosTime{v}

}

// HasNotBefore returns a boolean if a field has been set.
func (o *MetadataWithCertificateInformationAllOf) HasNotBefore() bool {
	if o != nil && o.NotBefore != nil {
		return true
	}

	return false
}

// GetNotAfter returns the NotAfter field value
// If the value is explicit nil, the zero value for time.Time will be returned
func (o *MetadataWithCertificateInformationAllOf) GetNotAfter() *time.Time {
	if o == nil {
		return nil
	}

	if o.NotAfter == nil {
		return nil
	}
	return &o.NotAfter.Time

}

// GetNotAfterOk returns a tuple with the NotAfter field value
// and a boolean to check if the value has been set.
// NOTE: If the value is an explicit nil, `nil, true` will be returned
func (o *MetadataWithCertificateInformationAllOf) GetNotAfterOk() (*time.Time, bool) {
	if o == nil {
		return nil, false
	}

	if o.NotAfter == nil {
		return nil, false
	}
	return &o.NotAfter.Time, true

}

// SetNotAfter sets field value
func (o *MetadataWithCertificateInformationAllOf) SetNotAfter(v time.Time) {

	o.NotAfter = &IonosTime{v}

}

// HasNotAfter returns a boolean if a field has been set.
func (o *MetadataWithCertificateInformationAllOf) HasNotAfter() bool {
	if o != nil && o.NotAfter != nil {
		return true
	}

	return false
}

// GetSerialNumber returns the SerialNumber field value
// If the value is explicit nil, the zero value for string will be returned
func (o *MetadataWithCertificateInformationAllOf) GetSerialNumber() *string {
	if o == nil {
		return nil
	}

	return o.SerialNumber

}

// GetSerialNumberOk returns a tuple with the SerialNumber field value
// and a boolean to check if the value has been set.
// NOTE: If the value is an explicit nil, `nil, true` will be returned
func (o *MetadataWithCertificateInformationAllOf) GetSerialNumberOk() (*string, bool) {
	if o == nil {
		return nil, false
	}

	return o.SerialNumber, true
}

// SetSerialNumber sets field value
func (o *MetadataWithCertificateInformationAllOf) SetSerialNumber(v string) {

	o.SerialNumber = &v

}

// HasSerialNumber returns a boolean if a field has been set.
func (o *MetadataWithCertificateInformationAllOf) HasSerialNumber() bool {
	if o != nil && o.SerialNumber != nil {
		return true
	}

	return false
}

// GetCommonName returns the CommonName field value
// If the value is explicit nil, the zero value for string will be returned
func (o *MetadataWithCertificateInformationAllOf) GetCommonName() *string {
	if o == nil {
		return nil
	}

	return o.CommonName

}

// GetCommonNameOk returns a tuple with the CommonName field value
// and a boolean to check if the value has been set.
// NOTE: If the value is an explicit nil, `nil, true` will be returned
func (o *MetadataWithCertificateInformationAllOf) GetCommonNameOk() (*string, bool) {
	if o == nil {
		return nil, false
	}

	return o.CommonName, true
}

// SetCommonName sets field value
func (o *MetadataWithCertificateInformationAllOf) SetCommonName(v string) {

	o.CommonName = &v

}

// HasCommonName returns a boolean if a field has been set.
func (o *MetadataWithCertificateInformationAllOf) HasCommonName() bool {
	if o != nil && o.CommonName != nil {
		return true
	}

	return false
}

// GetSubjectAlternativeNames returns the SubjectAlternativeNames field value
// If the value is explicit nil, the zero value for []string will be returned
func (o *MetadataWithCertificateInformationAllOf) GetSubjectAlternativeNames() *[]string {
	if o == nil {
		return nil
	}

	return o.SubjectAlternativeNames

}

// GetSubjectAlternativeNamesOk returns a tuple with the SubjectAlternativeNames field value
// and a boolean to check if the value has been set.
// NOTE: If the value is an explicit nil, `nil, true` will be returned
func (o *MetadataWithCertificateInformationAllOf) GetSubjectAlternativeNamesOk() (*[]string, bool) {
	if o == nil {
		return nil, false
	}

	return o.SubjectAlternativeNames, true
}

// SetSubjectAlternativeNames sets field value
func (o *MetadataWithCertificateInformationAllOf) SetSubjectAlternativeNames(v []string) {

	o.SubjectAlternativeNames = &v

}

// HasSubjectAlternativeNames returns a boolean if a field has been set.
func (o *MetadataWithCertificateInformationAllOf) HasSubjectAlternativeNames() bool {
	if o != nil && o.SubjectAlternativeNames != nil {
		return true
	}

	return false
}

func (o MetadataWithCertificateInformationAllOf) MarshalJSON() ([]byte, error) {
	toSerialize := map[string]interface{}{}
	if o.AutoCertificate != nil {
		toSerialize["autoCertificate"] = o.AutoCertificate
	}

	if o.LastIssuedCertificate != nil {
		toSerialize["lastIssuedCertificate"] = o.LastIssuedCertificate
	}

	if o.Expired != nil {
		toSerialize["expired"] = o.Expired
	}

	if o.NotBefore != nil {
		toSerialize["notBefore"] = o.NotBefore
	}

	if o.NotAfter != nil {
		toSerialize["notAfter"] = o.NotAfter
	}

	if o.SerialNumber != nil {
		toSerialize["serialNumber"] = o.SerialNumber
	}

	if o.CommonName != nil {
		toSerialize["commonName"] = o.CommonName
	}

	if o.SubjectAlternativeNames != nil {
		toSerialize["subjectAlternativeNames"] = o.SubjectAlternativeNames
	}

	return json.Marshal(toSerialize)
}

type NullableMetadataWithCertificateInformationAllOf struct {
	value *MetadataWithCertificateInformationAllOf
	isSet bool
}

func (v NullableMetadataWithCertificateInformationAllOf) Get() *MetadataWithCertificateInformationAllOf {
	return v.value
}

func (v *NullableMetadataWithCertificateInformationAllOf) Set(val *MetadataWithCertificateInformationAllOf) {
	v.value = val
	v.isSet = true
}

func (v NullableMetadataWithCertificateInformationAllOf) IsSet() bool {
	return v.isSet
}

func (v *NullableMetadataWithCertificateInformationAllOf) Unset() {
	v.value = nil
	v.isSet = false
}

func NewNullableMetadataWithCertificateInformationAllOf(val *MetadataWithCertificateInformationAllOf) *NullableMetadataWithCertificateInformationAllOf {
	return &NullableMetadataWithCertificateInformationAllOf{value: val, isSet: true}
}

func (v NullableMetadataWithCertificateInformationAllOf) MarshalJSON() ([]byte, error) {
	return json.Marshal(v.value)
}

func (v *NullableMetadataWithCertificateInformationAllOf) UnmarshalJSON(src []byte) error {
	v.isSet = true
	return json.Unmarshal(src, &v.value)
}
