// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
// Code generated by Microsoft (R) AutoRest Code Generator.

package com.azure.resourcemanager.recoveryservicessiterecovery.models;

import com.azure.core.annotation.Fluent;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.time.OffsetDateTime;

/** InMageRcmFailback protected disk details. */
@Fluent
public final class InMageRcmFailbackProtectedDiskDetails {
    /*
     * The disk Id (reported by source agent).
     */
    @JsonProperty(value = "diskId", access = JsonProperty.Access.WRITE_ONLY)
    private String diskId;

    /*
     * The disk name.
     */
    @JsonProperty(value = "diskName", access = JsonProperty.Access.WRITE_ONLY)
    private String diskName;

    /*
     * A value indicating whether the disk is the OS disk.
     */
    @JsonProperty(value = "isOSDisk", access = JsonProperty.Access.WRITE_ONLY)
    private String isOSDisk;

    /*
     * The disk capacity in bytes.
     */
    @JsonProperty(value = "capacityInBytes", access = JsonProperty.Access.WRITE_ONLY)
    private Long capacityInBytes;

    /*
     * The disk Uuid (reported by vCenter).
     */
    @JsonProperty(value = "diskUuid", access = JsonProperty.Access.WRITE_ONLY)
    private String diskUuid;

    /*
     * The data pending in log data store in MB.
     */
    @JsonProperty(value = "dataPendingInLogDataStoreInMB", access = JsonProperty.Access.WRITE_ONLY)
    private Double dataPendingInLogDataStoreInMB;

    /*
     * The data pending at source agent in MB.
     */
    @JsonProperty(value = "dataPendingAtSourceAgentInMB", access = JsonProperty.Access.WRITE_ONLY)
    private Double dataPendingAtSourceAgentInMB;

    /*
     * A value indicating whether initial replication is complete or not.
     */
    @JsonProperty(value = "isInitialReplicationComplete", access = JsonProperty.Access.WRITE_ONLY)
    private String isInitialReplicationComplete;

    /*
     * The initial replication details.
     */
    @JsonProperty(value = "irDetails")
    private InMageRcmFailbackSyncDetails irDetails;

    /*
     * The resync details.
     */
    @JsonProperty(value = "resyncDetails")
    private InMageRcmFailbackSyncDetails resyncDetails;

    /*
     * The last sync time.
     */
    @JsonProperty(value = "lastSyncTime", access = JsonProperty.Access.WRITE_ONLY)
    private OffsetDateTime lastSyncTime;

    /** Creates an instance of InMageRcmFailbackProtectedDiskDetails class. */
    public InMageRcmFailbackProtectedDiskDetails() {
    }

    /**
     * Get the diskId property: The disk Id (reported by source agent).
     *
     * @return the diskId value.
     */
    public String diskId() {
        return this.diskId;
    }

    /**
     * Get the diskName property: The disk name.
     *
     * @return the diskName value.
     */
    public String diskName() {
        return this.diskName;
    }

    /**
     * Get the isOSDisk property: A value indicating whether the disk is the OS disk.
     *
     * @return the isOSDisk value.
     */
    public String isOSDisk() {
        return this.isOSDisk;
    }

    /**
     * Get the capacityInBytes property: The disk capacity in bytes.
     *
     * @return the capacityInBytes value.
     */
    public Long capacityInBytes() {
        return this.capacityInBytes;
    }

    /**
     * Get the diskUuid property: The disk Uuid (reported by vCenter).
     *
     * @return the diskUuid value.
     */
    public String diskUuid() {
        return this.diskUuid;
    }

    /**
     * Get the dataPendingInLogDataStoreInMB property: The data pending in log data store in MB.
     *
     * @return the dataPendingInLogDataStoreInMB value.
     */
    public Double dataPendingInLogDataStoreInMB() {
        return this.dataPendingInLogDataStoreInMB;
    }

    /**
     * Get the dataPendingAtSourceAgentInMB property: The data pending at source agent in MB.
     *
     * @return the dataPendingAtSourceAgentInMB value.
     */
    public Double dataPendingAtSourceAgentInMB() {
        return this.dataPendingAtSourceAgentInMB;
    }

    /**
     * Get the isInitialReplicationComplete property: A value indicating whether initial replication is complete or not.
     *
     * @return the isInitialReplicationComplete value.
     */
    public String isInitialReplicationComplete() {
        return this.isInitialReplicationComplete;
    }

    /**
     * Get the irDetails property: The initial replication details.
     *
     * @return the irDetails value.
     */
    public InMageRcmFailbackSyncDetails irDetails() {
        return this.irDetails;
    }

    /**
     * Set the irDetails property: The initial replication details.
     *
     * @param irDetails the irDetails value to set.
     * @return the InMageRcmFailbackProtectedDiskDetails object itself.
     */
    public InMageRcmFailbackProtectedDiskDetails withIrDetails(InMageRcmFailbackSyncDetails irDetails) {
        this.irDetails = irDetails;
        return this;
    }

    /**
     * Get the resyncDetails property: The resync details.
     *
     * @return the resyncDetails value.
     */
    public InMageRcmFailbackSyncDetails resyncDetails() {
        return this.resyncDetails;
    }

    /**
     * Set the resyncDetails property: The resync details.
     *
     * @param resyncDetails the resyncDetails value to set.
     * @return the InMageRcmFailbackProtectedDiskDetails object itself.
     */
    public InMageRcmFailbackProtectedDiskDetails withResyncDetails(InMageRcmFailbackSyncDetails resyncDetails) {
        this.resyncDetails = resyncDetails;
        return this;
    }

    /**
     * Get the lastSyncTime property: The last sync time.
     *
     * @return the lastSyncTime value.
     */
    public OffsetDateTime lastSyncTime() {
        return this.lastSyncTime;
    }

    /**
     * Validates the instance.
     *
     * @throws IllegalArgumentException thrown if the instance is not valid.
     */
    public void validate() {
        if (irDetails() != null) {
            irDetails().validate();
        }
        if (resyncDetails() != null) {
            resyncDetails().validate();
        }
    }
}
