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

package com.azure.resourcemanager.storageimportexport.models;

import com.azure.core.annotation.Fluent;
import com.fasterxml.jackson.annotation.JsonProperty;

/** Provides information about the drive's status. */
@Fluent
public final class DriveStatus {
    /*
     * The drive's hardware serial number, without spaces.
     */
    @JsonProperty(value = "driveId")
    private String driveId;

    /*
     * The BitLocker key used to encrypt the drive.
     */
    @JsonProperty(value = "bitLockerKey")
    private String bitLockerKey;

    /*
     * The relative path of the manifest file on the drive.
     */
    @JsonProperty(value = "manifestFile")
    private String manifestFile;

    /*
     * The Base16-encoded MD5 hash of the manifest file on the drive.
     */
    @JsonProperty(value = "manifestHash")
    private String manifestHash;

    /*
     * The drive header hash value.
     */
    @JsonProperty(value = "driveHeaderHash")
    private String driveHeaderHash;

    /*
     * The drive's current state.
     */
    @JsonProperty(value = "state")
    private DriveState state;

    /*
     * Detailed status about the data transfer process. This field is not returned in the response until the drive is
     * in the Transferring state.
     */
    @JsonProperty(value = "copyStatus")
    private String copyStatus;

    /*
     * Percentage completed for the drive.
     */
    @JsonProperty(value = "percentComplete")
    private Long percentComplete;

    /*
     * A URI that points to the blob containing the verbose log for the data transfer operation.
     */
    @JsonProperty(value = "verboseLogUri")
    private String verboseLogUri;

    /*
     * A URI that points to the blob containing the error log for the data transfer operation.
     */
    @JsonProperty(value = "errorLogUri")
    private String errorLogUri;

    /*
     * A URI that points to the blob containing the drive manifest file.
     */
    @JsonProperty(value = "manifestUri")
    private String manifestUri;

    /*
     * Bytes successfully transferred for the drive.
     */
    @JsonProperty(value = "bytesSucceeded")
    private Long bytesSucceeded;

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

    /**
     * Get the driveId property: The drive's hardware serial number, without spaces.
     *
     * @return the driveId value.
     */
    public String driveId() {
        return this.driveId;
    }

    /**
     * Set the driveId property: The drive's hardware serial number, without spaces.
     *
     * @param driveId the driveId value to set.
     * @return the DriveStatus object itself.
     */
    public DriveStatus withDriveId(String driveId) {
        this.driveId = driveId;
        return this;
    }

    /**
     * Get the bitLockerKey property: The BitLocker key used to encrypt the drive.
     *
     * @return the bitLockerKey value.
     */
    public String bitLockerKey() {
        return this.bitLockerKey;
    }

    /**
     * Set the bitLockerKey property: The BitLocker key used to encrypt the drive.
     *
     * @param bitLockerKey the bitLockerKey value to set.
     * @return the DriveStatus object itself.
     */
    public DriveStatus withBitLockerKey(String bitLockerKey) {
        this.bitLockerKey = bitLockerKey;
        return this;
    }

    /**
     * Get the manifestFile property: The relative path of the manifest file on the drive.
     *
     * @return the manifestFile value.
     */
    public String manifestFile() {
        return this.manifestFile;
    }

    /**
     * Set the manifestFile property: The relative path of the manifest file on the drive.
     *
     * @param manifestFile the manifestFile value to set.
     * @return the DriveStatus object itself.
     */
    public DriveStatus withManifestFile(String manifestFile) {
        this.manifestFile = manifestFile;
        return this;
    }

    /**
     * Get the manifestHash property: The Base16-encoded MD5 hash of the manifest file on the drive.
     *
     * @return the manifestHash value.
     */
    public String manifestHash() {
        return this.manifestHash;
    }

    /**
     * Set the manifestHash property: The Base16-encoded MD5 hash of the manifest file on the drive.
     *
     * @param manifestHash the manifestHash value to set.
     * @return the DriveStatus object itself.
     */
    public DriveStatus withManifestHash(String manifestHash) {
        this.manifestHash = manifestHash;
        return this;
    }

    /**
     * Get the driveHeaderHash property: The drive header hash value.
     *
     * @return the driveHeaderHash value.
     */
    public String driveHeaderHash() {
        return this.driveHeaderHash;
    }

    /**
     * Set the driveHeaderHash property: The drive header hash value.
     *
     * @param driveHeaderHash the driveHeaderHash value to set.
     * @return the DriveStatus object itself.
     */
    public DriveStatus withDriveHeaderHash(String driveHeaderHash) {
        this.driveHeaderHash = driveHeaderHash;
        return this;
    }

    /**
     * Get the state property: The drive's current state.
     *
     * @return the state value.
     */
    public DriveState state() {
        return this.state;
    }

    /**
     * Set the state property: The drive's current state.
     *
     * @param state the state value to set.
     * @return the DriveStatus object itself.
     */
    public DriveStatus withState(DriveState state) {
        this.state = state;
        return this;
    }

    /**
     * Get the copyStatus property: Detailed status about the data transfer process. This field is not returned in the
     * response until the drive is in the Transferring state.
     *
     * @return the copyStatus value.
     */
    public String copyStatus() {
        return this.copyStatus;
    }

    /**
     * Set the copyStatus property: Detailed status about the data transfer process. This field is not returned in the
     * response until the drive is in the Transferring state.
     *
     * @param copyStatus the copyStatus value to set.
     * @return the DriveStatus object itself.
     */
    public DriveStatus withCopyStatus(String copyStatus) {
        this.copyStatus = copyStatus;
        return this;
    }

    /**
     * Get the percentComplete property: Percentage completed for the drive.
     *
     * @return the percentComplete value.
     */
    public Long percentComplete() {
        return this.percentComplete;
    }

    /**
     * Set the percentComplete property: Percentage completed for the drive.
     *
     * @param percentComplete the percentComplete value to set.
     * @return the DriveStatus object itself.
     */
    public DriveStatus withPercentComplete(Long percentComplete) {
        this.percentComplete = percentComplete;
        return this;
    }

    /**
     * Get the verboseLogUri property: A URI that points to the blob containing the verbose log for the data transfer
     * operation.
     *
     * @return the verboseLogUri value.
     */
    public String verboseLogUri() {
        return this.verboseLogUri;
    }

    /**
     * Set the verboseLogUri property: A URI that points to the blob containing the verbose log for the data transfer
     * operation.
     *
     * @param verboseLogUri the verboseLogUri value to set.
     * @return the DriveStatus object itself.
     */
    public DriveStatus withVerboseLogUri(String verboseLogUri) {
        this.verboseLogUri = verboseLogUri;
        return this;
    }

    /**
     * Get the errorLogUri property: A URI that points to the blob containing the error log for the data transfer
     * operation.
     *
     * @return the errorLogUri value.
     */
    public String errorLogUri() {
        return this.errorLogUri;
    }

    /**
     * Set the errorLogUri property: A URI that points to the blob containing the error log for the data transfer
     * operation.
     *
     * @param errorLogUri the errorLogUri value to set.
     * @return the DriveStatus object itself.
     */
    public DriveStatus withErrorLogUri(String errorLogUri) {
        this.errorLogUri = errorLogUri;
        return this;
    }

    /**
     * Get the manifestUri property: A URI that points to the blob containing the drive manifest file.
     *
     * @return the manifestUri value.
     */
    public String manifestUri() {
        return this.manifestUri;
    }

    /**
     * Set the manifestUri property: A URI that points to the blob containing the drive manifest file.
     *
     * @param manifestUri the manifestUri value to set.
     * @return the DriveStatus object itself.
     */
    public DriveStatus withManifestUri(String manifestUri) {
        this.manifestUri = manifestUri;
        return this;
    }

    /**
     * Get the bytesSucceeded property: Bytes successfully transferred for the drive.
     *
     * @return the bytesSucceeded value.
     */
    public Long bytesSucceeded() {
        return this.bytesSucceeded;
    }

    /**
     * Set the bytesSucceeded property: Bytes successfully transferred for the drive.
     *
     * @param bytesSucceeded the bytesSucceeded value to set.
     * @return the DriveStatus object itself.
     */
    public DriveStatus withBytesSucceeded(Long bytesSucceeded) {
        this.bytesSucceeded = bytesSucceeded;
        return this;
    }

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