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

package com.azure.resourcemanager.databox.models;

import com.azure.core.annotation.Immutable;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.List;

/** Granular Copy progress. */
@Immutable
public class GranularCopyProgress {
    /*
     * Name of the storage account. This will be empty for data account types other than storage account.
     */
    @JsonProperty(value = "storageAccountName", access = JsonProperty.Access.WRITE_ONLY)
    private String storageAccountName;

    /*
     * Transfer type of data
     */
    @JsonProperty(value = "transferType", access = JsonProperty.Access.WRITE_ONLY)
    private TransferType transferType;

    /*
     * Data Account Type.
     */
    @JsonProperty(value = "dataAccountType", access = JsonProperty.Access.WRITE_ONLY)
    private DataAccountType dataAccountType;

    /*
     * Id of the account where the data needs to be uploaded.
     */
    @JsonProperty(value = "accountId", access = JsonProperty.Access.WRITE_ONLY)
    private String accountId;

    /*
     * To indicate bytes transferred.
     */
    @JsonProperty(value = "bytesProcessed", access = JsonProperty.Access.WRITE_ONLY)
    private Long bytesProcessed;

    /*
     * Total amount of data to be processed by the job.
     */
    @JsonProperty(value = "totalBytesToProcess", access = JsonProperty.Access.WRITE_ONLY)
    private Long totalBytesToProcess;

    /*
     * Number of files processed
     */
    @JsonProperty(value = "filesProcessed", access = JsonProperty.Access.WRITE_ONLY)
    private Long filesProcessed;

    /*
     * Total files to process
     */
    @JsonProperty(value = "totalFilesToProcess", access = JsonProperty.Access.WRITE_ONLY)
    private Long totalFilesToProcess;

    /*
     * Number of files not adhering to azure naming conventions which were processed by automatic renaming
     */
    @JsonProperty(value = "invalidFilesProcessed", access = JsonProperty.Access.WRITE_ONLY)
    private Long invalidFilesProcessed;

    /*
     * Total amount of data not adhering to azure naming conventions which were processed by automatic renaming
     */
    @JsonProperty(value = "invalidFileBytesUploaded", access = JsonProperty.Access.WRITE_ONLY)
    private Long invalidFileBytesUploaded;

    /*
     * Number of folders not adhering to azure naming conventions which were processed by automatic renaming
     */
    @JsonProperty(value = "renamedContainerCount", access = JsonProperty.Access.WRITE_ONLY)
    private Long renamedContainerCount;

    /*
     * Number of files which could not be copied
     */
    @JsonProperty(value = "filesErroredOut", access = JsonProperty.Access.WRITE_ONLY)
    private Long filesErroredOut;

    /*
     * To indicate directories errored out in the job.
     */
    @JsonProperty(value = "directoriesErroredOut", access = JsonProperty.Access.WRITE_ONLY)
    private Long directoriesErroredOut;

    /*
     * To indicate directories renamed
     */
    @JsonProperty(value = "invalidDirectoriesProcessed", access = JsonProperty.Access.WRITE_ONLY)
    private Long invalidDirectoriesProcessed;

    /*
     * To indicate if enumeration of data is in progress.
     * Until this is true, the TotalBytesToProcess may not be valid.
     */
    @JsonProperty(value = "isEnumerationInProgress", access = JsonProperty.Access.WRITE_ONLY)
    private Boolean isEnumerationInProgress;

    /*
     * Error, if any, in the stage
     */
    @JsonProperty(value = "error", access = JsonProperty.Access.WRITE_ONLY)
    private CloudError error;

    /*
     * Available actions on the job.
     */
    @JsonProperty(value = "actions", access = JsonProperty.Access.WRITE_ONLY)
    private List<CustomerResolutionCode> actions;

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

    /**
     * Get the storageAccountName property: Name of the storage account. This will be empty for data account types other
     * than storage account.
     *
     * @return the storageAccountName value.
     */
    public String storageAccountName() {
        return this.storageAccountName;
    }

    /**
     * Get the transferType property: Transfer type of data.
     *
     * @return the transferType value.
     */
    public TransferType transferType() {
        return this.transferType;
    }

    /**
     * Get the dataAccountType property: Data Account Type.
     *
     * @return the dataAccountType value.
     */
    public DataAccountType dataAccountType() {
        return this.dataAccountType;
    }

    /**
     * Get the accountId property: Id of the account where the data needs to be uploaded.
     *
     * @return the accountId value.
     */
    public String accountId() {
        return this.accountId;
    }

    /**
     * Get the bytesProcessed property: To indicate bytes transferred.
     *
     * @return the bytesProcessed value.
     */
    public Long bytesProcessed() {
        return this.bytesProcessed;
    }

    /**
     * Get the totalBytesToProcess property: Total amount of data to be processed by the job.
     *
     * @return the totalBytesToProcess value.
     */
    public Long totalBytesToProcess() {
        return this.totalBytesToProcess;
    }

    /**
     * Get the filesProcessed property: Number of files processed.
     *
     * @return the filesProcessed value.
     */
    public Long filesProcessed() {
        return this.filesProcessed;
    }

    /**
     * Get the totalFilesToProcess property: Total files to process.
     *
     * @return the totalFilesToProcess value.
     */
    public Long totalFilesToProcess() {
        return this.totalFilesToProcess;
    }

    /**
     * Get the invalidFilesProcessed property: Number of files not adhering to azure naming conventions which were
     * processed by automatic renaming.
     *
     * @return the invalidFilesProcessed value.
     */
    public Long invalidFilesProcessed() {
        return this.invalidFilesProcessed;
    }

    /**
     * Get the invalidFileBytesUploaded property: Total amount of data not adhering to azure naming conventions which
     * were processed by automatic renaming.
     *
     * @return the invalidFileBytesUploaded value.
     */
    public Long invalidFileBytesUploaded() {
        return this.invalidFileBytesUploaded;
    }

    /**
     * Get the renamedContainerCount property: Number of folders not adhering to azure naming conventions which were
     * processed by automatic renaming.
     *
     * @return the renamedContainerCount value.
     */
    public Long renamedContainerCount() {
        return this.renamedContainerCount;
    }

    /**
     * Get the filesErroredOut property: Number of files which could not be copied.
     *
     * @return the filesErroredOut value.
     */
    public Long filesErroredOut() {
        return this.filesErroredOut;
    }

    /**
     * Get the directoriesErroredOut property: To indicate directories errored out in the job.
     *
     * @return the directoriesErroredOut value.
     */
    public Long directoriesErroredOut() {
        return this.directoriesErroredOut;
    }

    /**
     * Get the invalidDirectoriesProcessed property: To indicate directories renamed.
     *
     * @return the invalidDirectoriesProcessed value.
     */
    public Long invalidDirectoriesProcessed() {
        return this.invalidDirectoriesProcessed;
    }

    /**
     * Get the isEnumerationInProgress property: To indicate if enumeration of data is in progress. Until this is true,
     * the TotalBytesToProcess may not be valid.
     *
     * @return the isEnumerationInProgress value.
     */
    public Boolean isEnumerationInProgress() {
        return this.isEnumerationInProgress;
    }

    /**
     * Get the error property: Error, if any, in the stage.
     *
     * @return the error value.
     */
    public CloudError error() {
        return this.error;
    }

    /**
     * Get the actions property: Available actions on the job.
     *
     * @return the actions value.
     */
    public List<CustomerResolutionCode> actions() {
        return this.actions;
    }

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