// 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;

/** InMage protected disk details. */
@Fluent
public final class InMageProtectedDiskDetails {
    /*
     * The disk id.
     */
    @JsonProperty(value = "diskId")
    private String diskId;

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

    /*
     * The protection stage.
     */
    @JsonProperty(value = "protectionStage")
    private String protectionStage;

    /*
     * The health error code for the disk.
     */
    @JsonProperty(value = "healthErrorCode")
    private String healthErrorCode;

    /*
     * The RPO in seconds.
     */
    @JsonProperty(value = "rpoInSeconds")
    private Long rpoInSeconds;

    /*
     * A value indicating whether resync is required for this disk.
     */
    @JsonProperty(value = "resyncRequired")
    private String resyncRequired;

    /*
     * The resync progress percentage.
     */
    @JsonProperty(value = "resyncProgressPercentage")
    private Integer resyncProgressPercentage;

    /*
     * The resync duration in seconds.
     */
    @JsonProperty(value = "resyncDurationInSeconds")
    private Long resyncDurationInSeconds;

    /*
     * The disk capacity in bytes.
     */
    @JsonProperty(value = "diskCapacityInBytes")
    private Long diskCapacityInBytes;

    /*
     * The file system capacity in bytes.
     */
    @JsonProperty(value = "fileSystemCapacityInBytes")
    private Long fileSystemCapacityInBytes;

    /*
     * The source data transit in MB.
     */
    @JsonProperty(value = "sourceDataInMB")
    private Double sourceDataInMB;

    /*
     * The PS data transit in MB.
     */
    @JsonProperty(value = "psDataInMB")
    private Double psDataInMB;

    /*
     * The target data transit in MB.
     */
    @JsonProperty(value = "targetDataInMB")
    private Double targetDataInMB;

    /*
     * A value indicating whether disk is resized.
     */
    @JsonProperty(value = "diskResized")
    private String diskResized;

    /*
     * The last RPO calculated time.
     */
    @JsonProperty(value = "lastRpoCalculatedTime")
    private OffsetDateTime lastRpoCalculatedTime;

    /*
     * The resync processed bytes.
     */
    @JsonProperty(value = "resyncProcessedBytes")
    private Long resyncProcessedBytes;

    /*
     * The resync total transferred bytes.
     */
    @JsonProperty(value = "resyncTotalTransferredBytes")
    private Long resyncTotalTransferredBytes;

    /*
     * The resync last 15 minutes transferred bytes.
     */
    @JsonProperty(value = "resyncLast15MinutesTransferredBytes")
    private Long resyncLast15MinutesTransferredBytes;

    /*
     * The last data transfer time in UTC.
     */
    @JsonProperty(value = "resyncLastDataTransferTimeUTC")
    private OffsetDateTime resyncLastDataTransferTimeUtc;

    /*
     * The resync start time.
     */
    @JsonProperty(value = "resyncStartTime")
    private OffsetDateTime resyncStartTime;

    /*
     * The Progress Health.
     */
    @JsonProperty(value = "progressHealth")
    private String progressHealth;

    /*
     * The Progress Status.
     */
    @JsonProperty(value = "progressStatus")
    private String progressStatus;

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

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

    /**
     * Set the diskId property: The disk id.
     *
     * @param diskId the diskId value to set.
     * @return the InMageProtectedDiskDetails object itself.
     */
    public InMageProtectedDiskDetails withDiskId(String diskId) {
        this.diskId = diskId;
        return this;
    }

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

    /**
     * Set the diskName property: The disk name.
     *
     * @param diskName the diskName value to set.
     * @return the InMageProtectedDiskDetails object itself.
     */
    public InMageProtectedDiskDetails withDiskName(String diskName) {
        this.diskName = diskName;
        return this;
    }

    /**
     * Get the protectionStage property: The protection stage.
     *
     * @return the protectionStage value.
     */
    public String protectionStage() {
        return this.protectionStage;
    }

    /**
     * Set the protectionStage property: The protection stage.
     *
     * @param protectionStage the protectionStage value to set.
     * @return the InMageProtectedDiskDetails object itself.
     */
    public InMageProtectedDiskDetails withProtectionStage(String protectionStage) {
        this.protectionStage = protectionStage;
        return this;
    }

    /**
     * Get the healthErrorCode property: The health error code for the disk.
     *
     * @return the healthErrorCode value.
     */
    public String healthErrorCode() {
        return this.healthErrorCode;
    }

    /**
     * Set the healthErrorCode property: The health error code for the disk.
     *
     * @param healthErrorCode the healthErrorCode value to set.
     * @return the InMageProtectedDiskDetails object itself.
     */
    public InMageProtectedDiskDetails withHealthErrorCode(String healthErrorCode) {
        this.healthErrorCode = healthErrorCode;
        return this;
    }

    /**
     * Get the rpoInSeconds property: The RPO in seconds.
     *
     * @return the rpoInSeconds value.
     */
    public Long rpoInSeconds() {
        return this.rpoInSeconds;
    }

    /**
     * Set the rpoInSeconds property: The RPO in seconds.
     *
     * @param rpoInSeconds the rpoInSeconds value to set.
     * @return the InMageProtectedDiskDetails object itself.
     */
    public InMageProtectedDiskDetails withRpoInSeconds(Long rpoInSeconds) {
        this.rpoInSeconds = rpoInSeconds;
        return this;
    }

    /**
     * Get the resyncRequired property: A value indicating whether resync is required for this disk.
     *
     * @return the resyncRequired value.
     */
    public String resyncRequired() {
        return this.resyncRequired;
    }

    /**
     * Set the resyncRequired property: A value indicating whether resync is required for this disk.
     *
     * @param resyncRequired the resyncRequired value to set.
     * @return the InMageProtectedDiskDetails object itself.
     */
    public InMageProtectedDiskDetails withResyncRequired(String resyncRequired) {
        this.resyncRequired = resyncRequired;
        return this;
    }

    /**
     * Get the resyncProgressPercentage property: The resync progress percentage.
     *
     * @return the resyncProgressPercentage value.
     */
    public Integer resyncProgressPercentage() {
        return this.resyncProgressPercentage;
    }

    /**
     * Set the resyncProgressPercentage property: The resync progress percentage.
     *
     * @param resyncProgressPercentage the resyncProgressPercentage value to set.
     * @return the InMageProtectedDiskDetails object itself.
     */
    public InMageProtectedDiskDetails withResyncProgressPercentage(Integer resyncProgressPercentage) {
        this.resyncProgressPercentage = resyncProgressPercentage;
        return this;
    }

    /**
     * Get the resyncDurationInSeconds property: The resync duration in seconds.
     *
     * @return the resyncDurationInSeconds value.
     */
    public Long resyncDurationInSeconds() {
        return this.resyncDurationInSeconds;
    }

    /**
     * Set the resyncDurationInSeconds property: The resync duration in seconds.
     *
     * @param resyncDurationInSeconds the resyncDurationInSeconds value to set.
     * @return the InMageProtectedDiskDetails object itself.
     */
    public InMageProtectedDiskDetails withResyncDurationInSeconds(Long resyncDurationInSeconds) {
        this.resyncDurationInSeconds = resyncDurationInSeconds;
        return this;
    }

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

    /**
     * Set the diskCapacityInBytes property: The disk capacity in bytes.
     *
     * @param diskCapacityInBytes the diskCapacityInBytes value to set.
     * @return the InMageProtectedDiskDetails object itself.
     */
    public InMageProtectedDiskDetails withDiskCapacityInBytes(Long diskCapacityInBytes) {
        this.diskCapacityInBytes = diskCapacityInBytes;
        return this;
    }

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

    /**
     * Set the fileSystemCapacityInBytes property: The file system capacity in bytes.
     *
     * @param fileSystemCapacityInBytes the fileSystemCapacityInBytes value to set.
     * @return the InMageProtectedDiskDetails object itself.
     */
    public InMageProtectedDiskDetails withFileSystemCapacityInBytes(Long fileSystemCapacityInBytes) {
        this.fileSystemCapacityInBytes = fileSystemCapacityInBytes;
        return this;
    }

    /**
     * Get the sourceDataInMB property: The source data transit in MB.
     *
     * @return the sourceDataInMB value.
     */
    public Double sourceDataInMB() {
        return this.sourceDataInMB;
    }

    /**
     * Set the sourceDataInMB property: The source data transit in MB.
     *
     * @param sourceDataInMB the sourceDataInMB value to set.
     * @return the InMageProtectedDiskDetails object itself.
     */
    public InMageProtectedDiskDetails withSourceDataInMB(Double sourceDataInMB) {
        this.sourceDataInMB = sourceDataInMB;
        return this;
    }

    /**
     * Get the psDataInMB property: The PS data transit in MB.
     *
     * @return the psDataInMB value.
     */
    public Double psDataInMB() {
        return this.psDataInMB;
    }

    /**
     * Set the psDataInMB property: The PS data transit in MB.
     *
     * @param psDataInMB the psDataInMB value to set.
     * @return the InMageProtectedDiskDetails object itself.
     */
    public InMageProtectedDiskDetails withPsDataInMB(Double psDataInMB) {
        this.psDataInMB = psDataInMB;
        return this;
    }

    /**
     * Get the targetDataInMB property: The target data transit in MB.
     *
     * @return the targetDataInMB value.
     */
    public Double targetDataInMB() {
        return this.targetDataInMB;
    }

    /**
     * Set the targetDataInMB property: The target data transit in MB.
     *
     * @param targetDataInMB the targetDataInMB value to set.
     * @return the InMageProtectedDiskDetails object itself.
     */
    public InMageProtectedDiskDetails withTargetDataInMB(Double targetDataInMB) {
        this.targetDataInMB = targetDataInMB;
        return this;
    }

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

    /**
     * Set the diskResized property: A value indicating whether disk is resized.
     *
     * @param diskResized the diskResized value to set.
     * @return the InMageProtectedDiskDetails object itself.
     */
    public InMageProtectedDiskDetails withDiskResized(String diskResized) {
        this.diskResized = diskResized;
        return this;
    }

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

    /**
     * Set the lastRpoCalculatedTime property: The last RPO calculated time.
     *
     * @param lastRpoCalculatedTime the lastRpoCalculatedTime value to set.
     * @return the InMageProtectedDiskDetails object itself.
     */
    public InMageProtectedDiskDetails withLastRpoCalculatedTime(OffsetDateTime lastRpoCalculatedTime) {
        this.lastRpoCalculatedTime = lastRpoCalculatedTime;
        return this;
    }

    /**
     * Get the resyncProcessedBytes property: The resync processed bytes.
     *
     * @return the resyncProcessedBytes value.
     */
    public Long resyncProcessedBytes() {
        return this.resyncProcessedBytes;
    }

    /**
     * Set the resyncProcessedBytes property: The resync processed bytes.
     *
     * @param resyncProcessedBytes the resyncProcessedBytes value to set.
     * @return the InMageProtectedDiskDetails object itself.
     */
    public InMageProtectedDiskDetails withResyncProcessedBytes(Long resyncProcessedBytes) {
        this.resyncProcessedBytes = resyncProcessedBytes;
        return this;
    }

    /**
     * Get the resyncTotalTransferredBytes property: The resync total transferred bytes.
     *
     * @return the resyncTotalTransferredBytes value.
     */
    public Long resyncTotalTransferredBytes() {
        return this.resyncTotalTransferredBytes;
    }

    /**
     * Set the resyncTotalTransferredBytes property: The resync total transferred bytes.
     *
     * @param resyncTotalTransferredBytes the resyncTotalTransferredBytes value to set.
     * @return the InMageProtectedDiskDetails object itself.
     */
    public InMageProtectedDiskDetails withResyncTotalTransferredBytes(Long resyncTotalTransferredBytes) {
        this.resyncTotalTransferredBytes = resyncTotalTransferredBytes;
        return this;
    }

    /**
     * Get the resyncLast15MinutesTransferredBytes property: The resync last 15 minutes transferred bytes.
     *
     * @return the resyncLast15MinutesTransferredBytes value.
     */
    public Long resyncLast15MinutesTransferredBytes() {
        return this.resyncLast15MinutesTransferredBytes;
    }

    /**
     * Set the resyncLast15MinutesTransferredBytes property: The resync last 15 minutes transferred bytes.
     *
     * @param resyncLast15MinutesTransferredBytes the resyncLast15MinutesTransferredBytes value to set.
     * @return the InMageProtectedDiskDetails object itself.
     */
    public InMageProtectedDiskDetails withResyncLast15MinutesTransferredBytes(
        Long resyncLast15MinutesTransferredBytes) {
        this.resyncLast15MinutesTransferredBytes = resyncLast15MinutesTransferredBytes;
        return this;
    }

    /**
     * Get the resyncLastDataTransferTimeUtc property: The last data transfer time in UTC.
     *
     * @return the resyncLastDataTransferTimeUtc value.
     */
    public OffsetDateTime resyncLastDataTransferTimeUtc() {
        return this.resyncLastDataTransferTimeUtc;
    }

    /**
     * Set the resyncLastDataTransferTimeUtc property: The last data transfer time in UTC.
     *
     * @param resyncLastDataTransferTimeUtc the resyncLastDataTransferTimeUtc value to set.
     * @return the InMageProtectedDiskDetails object itself.
     */
    public InMageProtectedDiskDetails withResyncLastDataTransferTimeUtc(OffsetDateTime resyncLastDataTransferTimeUtc) {
        this.resyncLastDataTransferTimeUtc = resyncLastDataTransferTimeUtc;
        return this;
    }

    /**
     * Get the resyncStartTime property: The resync start time.
     *
     * @return the resyncStartTime value.
     */
    public OffsetDateTime resyncStartTime() {
        return this.resyncStartTime;
    }

    /**
     * Set the resyncStartTime property: The resync start time.
     *
     * @param resyncStartTime the resyncStartTime value to set.
     * @return the InMageProtectedDiskDetails object itself.
     */
    public InMageProtectedDiskDetails withResyncStartTime(OffsetDateTime resyncStartTime) {
        this.resyncStartTime = resyncStartTime;
        return this;
    }

    /**
     * Get the progressHealth property: The Progress Health.
     *
     * @return the progressHealth value.
     */
    public String progressHealth() {
        return this.progressHealth;
    }

    /**
     * Set the progressHealth property: The Progress Health.
     *
     * @param progressHealth the progressHealth value to set.
     * @return the InMageProtectedDiskDetails object itself.
     */
    public InMageProtectedDiskDetails withProgressHealth(String progressHealth) {
        this.progressHealth = progressHealth;
        return this;
    }

    /**
     * Get the progressStatus property: The Progress Status.
     *
     * @return the progressStatus value.
     */
    public String progressStatus() {
        return this.progressStatus;
    }

    /**
     * Set the progressStatus property: The Progress Status.
     *
     * @param progressStatus the progressStatus value to set.
     * @return the InMageProtectedDiskDetails object itself.
     */
    public InMageProtectedDiskDetails withProgressStatus(String progressStatus) {
        this.progressStatus = progressStatus;
        return this;
    }

    /**
     * Validates the instance.
     *
     * @throws IllegalArgumentException thrown if the instance is not valid.
     */
    public void validate() {
    }
}
