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

package com.azure.resourcemanager.securityinsights.models;

import com.azure.core.management.SystemData;
import com.azure.core.util.Context;
import com.azure.resourcemanager.securityinsights.fluent.models.FileImportInner;
import java.time.OffsetDateTime;
import java.util.List;

/** An immutable client-side representation of FileImport. */
public interface FileImport {
    /**
     * Gets the id property: Fully qualified resource Id for the resource.
     *
     * @return the id value.
     */
    String id();

    /**
     * Gets the name property: The name of the resource.
     *
     * @return the name value.
     */
    String name();

    /**
     * Gets the type property: The type of the resource.
     *
     * @return the type value.
     */
    String type();

    /**
     * Gets the systemData property: Azure Resource Manager metadata containing createdBy and modifiedBy information.
     *
     * @return the systemData value.
     */
    SystemData systemData();

    /**
     * Gets the ingestionMode property: Describes how to ingest the records in the file.
     *
     * @return the ingestionMode value.
     */
    IngestionMode ingestionMode();

    /**
     * Gets the contentType property: The content type of this file.
     *
     * @return the contentType value.
     */
    FileImportContentType contentType();

    /**
     * Gets the createdTimeUtc property: The time the file was imported.
     *
     * @return the createdTimeUtc value.
     */
    OffsetDateTime createdTimeUtc();

    /**
     * Gets the errorFile property: Represents the error file (if the import was ingested with errors or failed the
     * validation).
     *
     * @return the errorFile value.
     */
    FileMetadata errorFile();

    /**
     * Gets the errorsPreview property: An ordered list of some of the errors that were encountered during validation.
     *
     * @return the errorsPreview value.
     */
    List<ValidationError> errorsPreview();

    /**
     * Gets the importFile property: Represents the imported file.
     *
     * @return the importFile value.
     */
    FileMetadata importFile();

    /**
     * Gets the ingestedRecordCount property: The number of records that have been successfully ingested.
     *
     * @return the ingestedRecordCount value.
     */
    Integer ingestedRecordCount();

    /**
     * Gets the source property: The source for the data in the file.
     *
     * @return the source value.
     */
    String source();

    /**
     * Gets the state property: The state of the file import.
     *
     * @return the state value.
     */
    FileImportState state();

    /**
     * Gets the totalRecordCount property: The number of records in the file.
     *
     * @return the totalRecordCount value.
     */
    Integer totalRecordCount();

    /**
     * Gets the validRecordCount property: The number of records that have passed validation.
     *
     * @return the validRecordCount value.
     */
    Integer validRecordCount();

    /**
     * Gets the filesValidUntilTimeUtc property: The time the files associated with this import are deleted from the
     * storage account.
     *
     * @return the filesValidUntilTimeUtc value.
     */
    OffsetDateTime filesValidUntilTimeUtc();

    /**
     * Gets the importValidUntilTimeUtc property: The time the file import record is soft deleted from the database and
     * history.
     *
     * @return the importValidUntilTimeUtc value.
     */
    OffsetDateTime importValidUntilTimeUtc();

    /**
     * Gets the inner com.azure.resourcemanager.securityinsights.fluent.models.FileImportInner object.
     *
     * @return the inner object.
     */
    FileImportInner innerModel();

    /** The entirety of the FileImport definition. */
    interface Definition
        extends DefinitionStages.Blank, DefinitionStages.WithParentResource, DefinitionStages.WithCreate {
    }
    /** The FileImport definition stages. */
    interface DefinitionStages {
        /** The first stage of the FileImport definition. */
        interface Blank extends WithParentResource {
        }
        /** The stage of the FileImport definition allowing to specify parent resource. */
        interface WithParentResource {
            /**
             * Specifies resourceGroupName, workspaceName.
             *
             * @param resourceGroupName The name of the resource group. The name is case insensitive.
             * @param workspaceName The name of the workspace.
             * @return the next definition stage.
             */
            WithCreate withExistingWorkspace(String resourceGroupName, String workspaceName);
        }
        /**
         * The stage of the FileImport definition which contains all the minimum required properties for the resource to
         * be created, but also allows for any other optional properties to be specified.
         */
        interface WithCreate
            extends DefinitionStages.WithIngestionMode,
                DefinitionStages.WithContentType,
                DefinitionStages.WithImportFile,
                DefinitionStages.WithSource {
            /**
             * Executes the create request.
             *
             * @return the created resource.
             */
            FileImport create();

            /**
             * Executes the create request.
             *
             * @param context The context to associate with this operation.
             * @return the created resource.
             */
            FileImport create(Context context);
        }
        /** The stage of the FileImport definition allowing to specify ingestionMode. */
        interface WithIngestionMode {
            /**
             * Specifies the ingestionMode property: Describes how to ingest the records in the file..
             *
             * @param ingestionMode Describes how to ingest the records in the file.
             * @return the next definition stage.
             */
            WithCreate withIngestionMode(IngestionMode ingestionMode);
        }
        /** The stage of the FileImport definition allowing to specify contentType. */
        interface WithContentType {
            /**
             * Specifies the contentType property: The content type of this file..
             *
             * @param contentType The content type of this file.
             * @return the next definition stage.
             */
            WithCreate withContentType(FileImportContentType contentType);
        }
        /** The stage of the FileImport definition allowing to specify importFile. */
        interface WithImportFile {
            /**
             * Specifies the importFile property: Represents the imported file..
             *
             * @param importFile Represents the imported file.
             * @return the next definition stage.
             */
            WithCreate withImportFile(FileMetadata importFile);
        }
        /** The stage of the FileImport definition allowing to specify source. */
        interface WithSource {
            /**
             * Specifies the source property: The source for the data in the file..
             *
             * @param source The source for the data in the file.
             * @return the next definition stage.
             */
            WithCreate withSource(String source);
        }
    }
    /**
     * Refreshes the resource to sync with Azure.
     *
     * @return the refreshed resource.
     */
    FileImport refresh();

    /**
     * Refreshes the resource to sync with Azure.
     *
     * @param context The context to associate with this operation.
     * @return the refreshed resource.
     */
    FileImport refresh(Context context);
}
