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

package com.azure.resourcemanager.synapse.models;

import com.azure.core.util.Context;
import com.azure.resourcemanager.synapse.fluent.models.ServerVulnerabilityAssessmentInner;

/** An immutable client-side representation of ServerVulnerabilityAssessment. */
public interface ServerVulnerabilityAssessment {
    /**
     * 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 storageContainerPath property: A blob storage container path to hold the scan results (e.g.
     * https://myStorage.blob.core.windows.net/VaScans/).
     *
     * @return the storageContainerPath value.
     */
    String storageContainerPath();

    /**
     * Gets the storageContainerSasKey property: A shared access signature (SAS Key) that has read and write access to
     * the blob container specified in 'storageContainerPath' parameter. If 'storageAccountAccessKey' isn't specified,
     * StorageContainerSasKey is required.
     *
     * @return the storageContainerSasKey value.
     */
    String storageContainerSasKey();

    /**
     * Gets the storageAccountAccessKey property: Specifies the identifier key of the storage account for vulnerability
     * assessment scan results. If 'StorageContainerSasKey' isn't specified, storageAccountAccessKey is required.
     *
     * @return the storageAccountAccessKey value.
     */
    String storageAccountAccessKey();

    /**
     * Gets the recurringScans property: The recurring scans settings.
     *
     * @return the recurringScans value.
     */
    VulnerabilityAssessmentRecurringScansPropertiesAutoGenerated recurringScans();

    /**
     * Gets the name of the resource group.
     *
     * @return the name of the resource group.
     */
    String resourceGroupName();

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

    /** The entirety of the ServerVulnerabilityAssessment definition. */
    interface Definition
        extends DefinitionStages.Blank, DefinitionStages.WithParentResource, DefinitionStages.WithCreate {
    }
    /** The ServerVulnerabilityAssessment definition stages. */
    interface DefinitionStages {
        /** The first stage of the ServerVulnerabilityAssessment definition. */
        interface Blank extends WithParentResource {
        }
        /** The stage of the ServerVulnerabilityAssessment 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 ServerVulnerabilityAssessment 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.WithStorageContainerPath,
                DefinitionStages.WithStorageContainerSasKey,
                DefinitionStages.WithStorageAccountAccessKey,
                DefinitionStages.WithRecurringScans {
            /**
             * Executes the create request.
             *
             * @return the created resource.
             */
            ServerVulnerabilityAssessment create();

            /**
             * Executes the create request.
             *
             * @param context The context to associate with this operation.
             * @return the created resource.
             */
            ServerVulnerabilityAssessment create(Context context);
        }
        /** The stage of the ServerVulnerabilityAssessment definition allowing to specify storageContainerPath. */
        interface WithStorageContainerPath {
            /**
             * Specifies the storageContainerPath property: A blob storage container path to hold the scan results (e.g.
             * https://myStorage.blob.core.windows.net/VaScans/)..
             *
             * @param storageContainerPath A blob storage container path to hold the scan results (e.g.
             *     https://myStorage.blob.core.windows.net/VaScans/).
             * @return the next definition stage.
             */
            WithCreate withStorageContainerPath(String storageContainerPath);
        }
        /** The stage of the ServerVulnerabilityAssessment definition allowing to specify storageContainerSasKey. */
        interface WithStorageContainerSasKey {
            /**
             * Specifies the storageContainerSasKey property: A shared access signature (SAS Key) that has read and
             * write access to the blob container specified in 'storageContainerPath' parameter. If
             * 'storageAccountAccessKey' isn't specified, StorageContainerSasKey is required..
             *
             * @param storageContainerSasKey A shared access signature (SAS Key) that has read and write access to the
             *     blob container specified in 'storageContainerPath' parameter. If 'storageAccountAccessKey' isn't
             *     specified, StorageContainerSasKey is required.
             * @return the next definition stage.
             */
            WithCreate withStorageContainerSasKey(String storageContainerSasKey);
        }
        /** The stage of the ServerVulnerabilityAssessment definition allowing to specify storageAccountAccessKey. */
        interface WithStorageAccountAccessKey {
            /**
             * Specifies the storageAccountAccessKey property: Specifies the identifier key of the storage account for
             * vulnerability assessment scan results. If 'StorageContainerSasKey' isn't specified,
             * storageAccountAccessKey is required..
             *
             * @param storageAccountAccessKey Specifies the identifier key of the storage account for vulnerability
             *     assessment scan results. If 'StorageContainerSasKey' isn't specified, storageAccountAccessKey is
             *     required.
             * @return the next definition stage.
             */
            WithCreate withStorageAccountAccessKey(String storageAccountAccessKey);
        }
        /** The stage of the ServerVulnerabilityAssessment definition allowing to specify recurringScans. */
        interface WithRecurringScans {
            /**
             * Specifies the recurringScans property: The recurring scans settings.
             *
             * @param recurringScans The recurring scans settings.
             * @return the next definition stage.
             */
            WithCreate withRecurringScans(VulnerabilityAssessmentRecurringScansPropertiesAutoGenerated recurringScans);
        }
    }
    /**
     * Begins update for the ServerVulnerabilityAssessment resource.
     *
     * @return the stage of resource update.
     */
    ServerVulnerabilityAssessment.Update update();

    /** The template for ServerVulnerabilityAssessment update. */
    interface Update
        extends UpdateStages.WithStorageContainerSasKey,
            UpdateStages.WithStorageAccountAccessKey,
            UpdateStages.WithRecurringScans {
        /**
         * Executes the update request.
         *
         * @return the updated resource.
         */
        ServerVulnerabilityAssessment apply();

        /**
         * Executes the update request.
         *
         * @param context The context to associate with this operation.
         * @return the updated resource.
         */
        ServerVulnerabilityAssessment apply(Context context);
    }
    /** The ServerVulnerabilityAssessment update stages. */
    interface UpdateStages {
        /** The stage of the ServerVulnerabilityAssessment update allowing to specify storageContainerSasKey. */
        interface WithStorageContainerSasKey {
            /**
             * Specifies the storageContainerSasKey property: A shared access signature (SAS Key) that has read and
             * write access to the blob container specified in 'storageContainerPath' parameter. If
             * 'storageAccountAccessKey' isn't specified, StorageContainerSasKey is required..
             *
             * @param storageContainerSasKey A shared access signature (SAS Key) that has read and write access to the
             *     blob container specified in 'storageContainerPath' parameter. If 'storageAccountAccessKey' isn't
             *     specified, StorageContainerSasKey is required.
             * @return the next definition stage.
             */
            Update withStorageContainerSasKey(String storageContainerSasKey);
        }
        /** The stage of the ServerVulnerabilityAssessment update allowing to specify storageAccountAccessKey. */
        interface WithStorageAccountAccessKey {
            /**
             * Specifies the storageAccountAccessKey property: Specifies the identifier key of the storage account for
             * vulnerability assessment scan results. If 'StorageContainerSasKey' isn't specified,
             * storageAccountAccessKey is required..
             *
             * @param storageAccountAccessKey Specifies the identifier key of the storage account for vulnerability
             *     assessment scan results. If 'StorageContainerSasKey' isn't specified, storageAccountAccessKey is
             *     required.
             * @return the next definition stage.
             */
            Update withStorageAccountAccessKey(String storageAccountAccessKey);
        }
        /** The stage of the ServerVulnerabilityAssessment update allowing to specify recurringScans. */
        interface WithRecurringScans {
            /**
             * Specifies the recurringScans property: The recurring scans settings.
             *
             * @param recurringScans The recurring scans settings.
             * @return the next definition stage.
             */
            Update withRecurringScans(VulnerabilityAssessmentRecurringScansPropertiesAutoGenerated recurringScans);
        }
    }
    /**
     * Refreshes the resource to sync with Azure.
     *
     * @return the refreshed resource.
     */
    ServerVulnerabilityAssessment refresh();

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