// *** WARNING: this file was generated by pulumi-java-gen. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***

package com.pulumi.azure.appservice;

import com.pulumi.azure.appservice.inputs.WindowsWebAppSlotAuthSettingsArgs;
import com.pulumi.azure.appservice.inputs.WindowsWebAppSlotAuthSettingsV2Args;
import com.pulumi.azure.appservice.inputs.WindowsWebAppSlotBackupArgs;
import com.pulumi.azure.appservice.inputs.WindowsWebAppSlotConnectionStringArgs;
import com.pulumi.azure.appservice.inputs.WindowsWebAppSlotIdentityArgs;
import com.pulumi.azure.appservice.inputs.WindowsWebAppSlotLogsArgs;
import com.pulumi.azure.appservice.inputs.WindowsWebAppSlotSiteConfigArgs;
import com.pulumi.azure.appservice.inputs.WindowsWebAppSlotStorageAccountArgs;
import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import java.lang.Boolean;
import java.lang.String;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


public final class WindowsWebAppSlotArgs extends com.pulumi.resources.ResourceArgs {

    public static final WindowsWebAppSlotArgs Empty = new WindowsWebAppSlotArgs();

    /**
     * The ID of the Windows Web App this Deployment Slot will be part of. Changing this forces a new Windows Web App to be created.
     * 
     */
    @Import(name="appServiceId", required=true)
    private Output<String> appServiceId;

    /**
     * @return The ID of the Windows Web App this Deployment Slot will be part of. Changing this forces a new Windows Web App to be created.
     * 
     */
    public Output<String> appServiceId() {
        return this.appServiceId;
    }

    /**
     * A map of key-value pairs of App Settings.
     * 
     */
    @Import(name="appSettings")
    private @Nullable Output<Map<String,String>> appSettings;

    /**
     * @return A map of key-value pairs of App Settings.
     * 
     */
    public Optional<Output<Map<String,String>>> appSettings() {
        return Optional.ofNullable(this.appSettings);
    }

    /**
     * An `auth_settings` block as defined below.
     * 
     */
    @Import(name="authSettings")
    private @Nullable Output<WindowsWebAppSlotAuthSettingsArgs> authSettings;

    /**
     * @return An `auth_settings` block as defined below.
     * 
     */
    public Optional<Output<WindowsWebAppSlotAuthSettingsArgs>> authSettings() {
        return Optional.ofNullable(this.authSettings);
    }

    /**
     * An `auth_settings_v2` block as defined below.
     * 
     */
    @Import(name="authSettingsV2")
    private @Nullable Output<WindowsWebAppSlotAuthSettingsV2Args> authSettingsV2;

    /**
     * @return An `auth_settings_v2` block as defined below.
     * 
     */
    public Optional<Output<WindowsWebAppSlotAuthSettingsV2Args>> authSettingsV2() {
        return Optional.ofNullable(this.authSettingsV2);
    }

    /**
     * A `backup` block as defined below.
     * 
     */
    @Import(name="backup")
    private @Nullable Output<WindowsWebAppSlotBackupArgs> backup;

    /**
     * @return A `backup` block as defined below.
     * 
     */
    public Optional<Output<WindowsWebAppSlotBackupArgs>> backup() {
        return Optional.ofNullable(this.backup);
    }

    /**
     * Should Client Affinity be enabled?
     * 
     */
    @Import(name="clientAffinityEnabled")
    private @Nullable Output<Boolean> clientAffinityEnabled;

    /**
     * @return Should Client Affinity be enabled?
     * 
     */
    public Optional<Output<Boolean>> clientAffinityEnabled() {
        return Optional.ofNullable(this.clientAffinityEnabled);
    }

    /**
     * Should Client Certificates be enabled?
     * 
     */
    @Import(name="clientCertificateEnabled")
    private @Nullable Output<Boolean> clientCertificateEnabled;

    /**
     * @return Should Client Certificates be enabled?
     * 
     */
    public Optional<Output<Boolean>> clientCertificateEnabled() {
        return Optional.ofNullable(this.clientCertificateEnabled);
    }

    /**
     * Paths to exclude when using client certificates, separated by ;
     * 
     */
    @Import(name="clientCertificateExclusionPaths")
    private @Nullable Output<String> clientCertificateExclusionPaths;

    /**
     * @return Paths to exclude when using client certificates, separated by ;
     * 
     */
    public Optional<Output<String>> clientCertificateExclusionPaths() {
        return Optional.ofNullable(this.clientCertificateExclusionPaths);
    }

    /**
     * The Client Certificate mode. Possible values are `Required`, `Optional`, and `OptionalInteractiveUser`. This property has no effect when `client_cert_enabled` is `false`
     * 
     */
    @Import(name="clientCertificateMode")
    private @Nullable Output<String> clientCertificateMode;

    /**
     * @return The Client Certificate mode. Possible values are `Required`, `Optional`, and `OptionalInteractiveUser`. This property has no effect when `client_cert_enabled` is `false`
     * 
     */
    public Optional<Output<String>> clientCertificateMode() {
        return Optional.ofNullable(this.clientCertificateMode);
    }

    /**
     * One or more `connection_string` blocks as defined below.
     * 
     */
    @Import(name="connectionStrings")
    private @Nullable Output<List<WindowsWebAppSlotConnectionStringArgs>> connectionStrings;

    /**
     * @return One or more `connection_string` blocks as defined below.
     * 
     */
    public Optional<Output<List<WindowsWebAppSlotConnectionStringArgs>>> connectionStrings() {
        return Optional.ofNullable(this.connectionStrings);
    }

    /**
     * Should the Windows Web App Slot be enabled? Defaults to `true`.
     * 
     */
    @Import(name="enabled")
    private @Nullable Output<Boolean> enabled;

    /**
     * @return Should the Windows Web App Slot be enabled? Defaults to `true`.
     * 
     */
    public Optional<Output<Boolean>> enabled() {
        return Optional.ofNullable(this.enabled);
    }

    /**
     * Should the Windows Web App Slot require HTTPS connections.
     * 
     */
    @Import(name="httpsOnly")
    private @Nullable Output<Boolean> httpsOnly;

    /**
     * @return Should the Windows Web App Slot require HTTPS connections.
     * 
     */
    public Optional<Output<Boolean>> httpsOnly() {
        return Optional.ofNullable(this.httpsOnly);
    }

    /**
     * An `identity` block as defined below.
     * 
     */
    @Import(name="identity")
    private @Nullable Output<WindowsWebAppSlotIdentityArgs> identity;

    /**
     * @return An `identity` block as defined below.
     * 
     */
    public Optional<Output<WindowsWebAppSlotIdentityArgs>> identity() {
        return Optional.ofNullable(this.identity);
    }

    /**
     * The User Assigned Identity ID used for accessing KeyVault secrets. The identity must be assigned to the application in the `identity` block. [For more information see - Access vaults with a user-assigned identity](https://docs.microsoft.com/azure/app-service/app-service-key-vault-references#access-vaults-with-a-user-assigned-identity)
     * 
     */
    @Import(name="keyVaultReferenceIdentityId")
    private @Nullable Output<String> keyVaultReferenceIdentityId;

    /**
     * @return The User Assigned Identity ID used for accessing KeyVault secrets. The identity must be assigned to the application in the `identity` block. [For more information see - Access vaults with a user-assigned identity](https://docs.microsoft.com/azure/app-service/app-service-key-vault-references#access-vaults-with-a-user-assigned-identity)
     * 
     */
    public Optional<Output<String>> keyVaultReferenceIdentityId() {
        return Optional.ofNullable(this.keyVaultReferenceIdentityId);
    }

    /**
     * A `logs` block as defined below.
     * 
     */
    @Import(name="logs")
    private @Nullable Output<WindowsWebAppSlotLogsArgs> logs;

    /**
     * @return A `logs` block as defined below.
     * 
     */
    public Optional<Output<WindowsWebAppSlotLogsArgs>> logs() {
        return Optional.ofNullable(this.logs);
    }

    /**
     * The Site Credentials Username used for publishing.
     * 
     */
    @Import(name="name")
    private @Nullable Output<String> name;

    /**
     * @return The Site Credentials Username used for publishing.
     * 
     */
    public Optional<Output<String>> name() {
        return Optional.ofNullable(this.name);
    }

    /**
     * Should public network access be enabled for the Web App. Defaults to `true`.
     * 
     */
    @Import(name="publicNetworkAccessEnabled")
    private @Nullable Output<Boolean> publicNetworkAccessEnabled;

    /**
     * @return Should public network access be enabled for the Web App. Defaults to `true`.
     * 
     */
    public Optional<Output<Boolean>> publicNetworkAccessEnabled() {
        return Optional.ofNullable(this.publicNetworkAccessEnabled);
    }

    /**
     * The ID of the Service Plan in which to run this slot. If not specified the same Service Plan as the Windows Web App will be used.
     * 
     */
    @Import(name="servicePlanId")
    private @Nullable Output<String> servicePlanId;

    /**
     * @return The ID of the Service Plan in which to run this slot. If not specified the same Service Plan as the Windows Web App will be used.
     * 
     */
    public Optional<Output<String>> servicePlanId() {
        return Optional.ofNullable(this.servicePlanId);
    }

    /**
     * A `site_config` block as defined below.
     * 
     */
    @Import(name="siteConfig", required=true)
    private Output<WindowsWebAppSlotSiteConfigArgs> siteConfig;

    /**
     * @return A `site_config` block as defined below.
     * 
     */
    public Output<WindowsWebAppSlotSiteConfigArgs> siteConfig() {
        return this.siteConfig;
    }

    /**
     * One or more `storage_account` blocks as defined below.
     * 
     * &gt; **Note:** Using this value requires `WEBSITE_RUN_FROM_PACKAGE=1` to be set on the App in `app_settings`. Refer to the [Azure docs](https://docs.microsoft.com/en-us/azure/app-service/deploy-run-package) for further details.
     * 
     */
    @Import(name="storageAccounts")
    private @Nullable Output<List<WindowsWebAppSlotStorageAccountArgs>> storageAccounts;

    /**
     * @return One or more `storage_account` blocks as defined below.
     * 
     * &gt; **Note:** Using this value requires `WEBSITE_RUN_FROM_PACKAGE=1` to be set on the App in `app_settings`. Refer to the [Azure docs](https://docs.microsoft.com/en-us/azure/app-service/deploy-run-package) for further details.
     * 
     */
    public Optional<Output<List<WindowsWebAppSlotStorageAccountArgs>>> storageAccounts() {
        return Optional.ofNullable(this.storageAccounts);
    }

    /**
     * A mapping of tags which should be assigned to the Windows Web App Slot.
     * 
     */
    @Import(name="tags")
    private @Nullable Output<Map<String,String>> tags;

    /**
     * @return A mapping of tags which should be assigned to the Windows Web App Slot.
     * 
     */
    public Optional<Output<Map<String,String>>> tags() {
        return Optional.ofNullable(this.tags);
    }

    @Import(name="virtualNetworkSubnetId")
    private @Nullable Output<String> virtualNetworkSubnetId;

    public Optional<Output<String>> virtualNetworkSubnetId() {
        return Optional.ofNullable(this.virtualNetworkSubnetId);
    }

    /**
     * The local path and filename of the Zip packaged application to deploy to this Windows Web App.
     * 
     */
    @Import(name="zipDeployFile")
    private @Nullable Output<String> zipDeployFile;

    /**
     * @return The local path and filename of the Zip packaged application to deploy to this Windows Web App.
     * 
     */
    public Optional<Output<String>> zipDeployFile() {
        return Optional.ofNullable(this.zipDeployFile);
    }

    private WindowsWebAppSlotArgs() {}

    private WindowsWebAppSlotArgs(WindowsWebAppSlotArgs $) {
        this.appServiceId = $.appServiceId;
        this.appSettings = $.appSettings;
        this.authSettings = $.authSettings;
        this.authSettingsV2 = $.authSettingsV2;
        this.backup = $.backup;
        this.clientAffinityEnabled = $.clientAffinityEnabled;
        this.clientCertificateEnabled = $.clientCertificateEnabled;
        this.clientCertificateExclusionPaths = $.clientCertificateExclusionPaths;
        this.clientCertificateMode = $.clientCertificateMode;
        this.connectionStrings = $.connectionStrings;
        this.enabled = $.enabled;
        this.httpsOnly = $.httpsOnly;
        this.identity = $.identity;
        this.keyVaultReferenceIdentityId = $.keyVaultReferenceIdentityId;
        this.logs = $.logs;
        this.name = $.name;
        this.publicNetworkAccessEnabled = $.publicNetworkAccessEnabled;
        this.servicePlanId = $.servicePlanId;
        this.siteConfig = $.siteConfig;
        this.storageAccounts = $.storageAccounts;
        this.tags = $.tags;
        this.virtualNetworkSubnetId = $.virtualNetworkSubnetId;
        this.zipDeployFile = $.zipDeployFile;
    }

    public static Builder builder() {
        return new Builder();
    }
    public static Builder builder(WindowsWebAppSlotArgs defaults) {
        return new Builder(defaults);
    }

    public static final class Builder {
        private WindowsWebAppSlotArgs $;

        public Builder() {
            $ = new WindowsWebAppSlotArgs();
        }

        public Builder(WindowsWebAppSlotArgs defaults) {
            $ = new WindowsWebAppSlotArgs(Objects.requireNonNull(defaults));
        }

        /**
         * @param appServiceId The ID of the Windows Web App this Deployment Slot will be part of. Changing this forces a new Windows Web App to be created.
         * 
         * @return builder
         * 
         */
        public Builder appServiceId(Output<String> appServiceId) {
            $.appServiceId = appServiceId;
            return this;
        }

        /**
         * @param appServiceId The ID of the Windows Web App this Deployment Slot will be part of. Changing this forces a new Windows Web App to be created.
         * 
         * @return builder
         * 
         */
        public Builder appServiceId(String appServiceId) {
            return appServiceId(Output.of(appServiceId));
        }

        /**
         * @param appSettings A map of key-value pairs of App Settings.
         * 
         * @return builder
         * 
         */
        public Builder appSettings(@Nullable Output<Map<String,String>> appSettings) {
            $.appSettings = appSettings;
            return this;
        }

        /**
         * @param appSettings A map of key-value pairs of App Settings.
         * 
         * @return builder
         * 
         */
        public Builder appSettings(Map<String,String> appSettings) {
            return appSettings(Output.of(appSettings));
        }

        /**
         * @param authSettings An `auth_settings` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder authSettings(@Nullable Output<WindowsWebAppSlotAuthSettingsArgs> authSettings) {
            $.authSettings = authSettings;
            return this;
        }

        /**
         * @param authSettings An `auth_settings` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder authSettings(WindowsWebAppSlotAuthSettingsArgs authSettings) {
            return authSettings(Output.of(authSettings));
        }

        /**
         * @param authSettingsV2 An `auth_settings_v2` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder authSettingsV2(@Nullable Output<WindowsWebAppSlotAuthSettingsV2Args> authSettingsV2) {
            $.authSettingsV2 = authSettingsV2;
            return this;
        }

        /**
         * @param authSettingsV2 An `auth_settings_v2` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder authSettingsV2(WindowsWebAppSlotAuthSettingsV2Args authSettingsV2) {
            return authSettingsV2(Output.of(authSettingsV2));
        }

        /**
         * @param backup A `backup` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder backup(@Nullable Output<WindowsWebAppSlotBackupArgs> backup) {
            $.backup = backup;
            return this;
        }

        /**
         * @param backup A `backup` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder backup(WindowsWebAppSlotBackupArgs backup) {
            return backup(Output.of(backup));
        }

        /**
         * @param clientAffinityEnabled Should Client Affinity be enabled?
         * 
         * @return builder
         * 
         */
        public Builder clientAffinityEnabled(@Nullable Output<Boolean> clientAffinityEnabled) {
            $.clientAffinityEnabled = clientAffinityEnabled;
            return this;
        }

        /**
         * @param clientAffinityEnabled Should Client Affinity be enabled?
         * 
         * @return builder
         * 
         */
        public Builder clientAffinityEnabled(Boolean clientAffinityEnabled) {
            return clientAffinityEnabled(Output.of(clientAffinityEnabled));
        }

        /**
         * @param clientCertificateEnabled Should Client Certificates be enabled?
         * 
         * @return builder
         * 
         */
        public Builder clientCertificateEnabled(@Nullable Output<Boolean> clientCertificateEnabled) {
            $.clientCertificateEnabled = clientCertificateEnabled;
            return this;
        }

        /**
         * @param clientCertificateEnabled Should Client Certificates be enabled?
         * 
         * @return builder
         * 
         */
        public Builder clientCertificateEnabled(Boolean clientCertificateEnabled) {
            return clientCertificateEnabled(Output.of(clientCertificateEnabled));
        }

        /**
         * @param clientCertificateExclusionPaths Paths to exclude when using client certificates, separated by ;
         * 
         * @return builder
         * 
         */
        public Builder clientCertificateExclusionPaths(@Nullable Output<String> clientCertificateExclusionPaths) {
            $.clientCertificateExclusionPaths = clientCertificateExclusionPaths;
            return this;
        }

        /**
         * @param clientCertificateExclusionPaths Paths to exclude when using client certificates, separated by ;
         * 
         * @return builder
         * 
         */
        public Builder clientCertificateExclusionPaths(String clientCertificateExclusionPaths) {
            return clientCertificateExclusionPaths(Output.of(clientCertificateExclusionPaths));
        }

        /**
         * @param clientCertificateMode The Client Certificate mode. Possible values are `Required`, `Optional`, and `OptionalInteractiveUser`. This property has no effect when `client_cert_enabled` is `false`
         * 
         * @return builder
         * 
         */
        public Builder clientCertificateMode(@Nullable Output<String> clientCertificateMode) {
            $.clientCertificateMode = clientCertificateMode;
            return this;
        }

        /**
         * @param clientCertificateMode The Client Certificate mode. Possible values are `Required`, `Optional`, and `OptionalInteractiveUser`. This property has no effect when `client_cert_enabled` is `false`
         * 
         * @return builder
         * 
         */
        public Builder clientCertificateMode(String clientCertificateMode) {
            return clientCertificateMode(Output.of(clientCertificateMode));
        }

        /**
         * @param connectionStrings One or more `connection_string` blocks as defined below.
         * 
         * @return builder
         * 
         */
        public Builder connectionStrings(@Nullable Output<List<WindowsWebAppSlotConnectionStringArgs>> connectionStrings) {
            $.connectionStrings = connectionStrings;
            return this;
        }

        /**
         * @param connectionStrings One or more `connection_string` blocks as defined below.
         * 
         * @return builder
         * 
         */
        public Builder connectionStrings(List<WindowsWebAppSlotConnectionStringArgs> connectionStrings) {
            return connectionStrings(Output.of(connectionStrings));
        }

        /**
         * @param connectionStrings One or more `connection_string` blocks as defined below.
         * 
         * @return builder
         * 
         */
        public Builder connectionStrings(WindowsWebAppSlotConnectionStringArgs... connectionStrings) {
            return connectionStrings(List.of(connectionStrings));
        }

        /**
         * @param enabled Should the Windows Web App Slot be enabled? Defaults to `true`.
         * 
         * @return builder
         * 
         */
        public Builder enabled(@Nullable Output<Boolean> enabled) {
            $.enabled = enabled;
            return this;
        }

        /**
         * @param enabled Should the Windows Web App Slot be enabled? Defaults to `true`.
         * 
         * @return builder
         * 
         */
        public Builder enabled(Boolean enabled) {
            return enabled(Output.of(enabled));
        }

        /**
         * @param httpsOnly Should the Windows Web App Slot require HTTPS connections.
         * 
         * @return builder
         * 
         */
        public Builder httpsOnly(@Nullable Output<Boolean> httpsOnly) {
            $.httpsOnly = httpsOnly;
            return this;
        }

        /**
         * @param httpsOnly Should the Windows Web App Slot require HTTPS connections.
         * 
         * @return builder
         * 
         */
        public Builder httpsOnly(Boolean httpsOnly) {
            return httpsOnly(Output.of(httpsOnly));
        }

        /**
         * @param identity An `identity` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder identity(@Nullable Output<WindowsWebAppSlotIdentityArgs> identity) {
            $.identity = identity;
            return this;
        }

        /**
         * @param identity An `identity` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder identity(WindowsWebAppSlotIdentityArgs identity) {
            return identity(Output.of(identity));
        }

        /**
         * @param keyVaultReferenceIdentityId The User Assigned Identity ID used for accessing KeyVault secrets. The identity must be assigned to the application in the `identity` block. [For more information see - Access vaults with a user-assigned identity](https://docs.microsoft.com/azure/app-service/app-service-key-vault-references#access-vaults-with-a-user-assigned-identity)
         * 
         * @return builder
         * 
         */
        public Builder keyVaultReferenceIdentityId(@Nullable Output<String> keyVaultReferenceIdentityId) {
            $.keyVaultReferenceIdentityId = keyVaultReferenceIdentityId;
            return this;
        }

        /**
         * @param keyVaultReferenceIdentityId The User Assigned Identity ID used for accessing KeyVault secrets. The identity must be assigned to the application in the `identity` block. [For more information see - Access vaults with a user-assigned identity](https://docs.microsoft.com/azure/app-service/app-service-key-vault-references#access-vaults-with-a-user-assigned-identity)
         * 
         * @return builder
         * 
         */
        public Builder keyVaultReferenceIdentityId(String keyVaultReferenceIdentityId) {
            return keyVaultReferenceIdentityId(Output.of(keyVaultReferenceIdentityId));
        }

        /**
         * @param logs A `logs` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder logs(@Nullable Output<WindowsWebAppSlotLogsArgs> logs) {
            $.logs = logs;
            return this;
        }

        /**
         * @param logs A `logs` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder logs(WindowsWebAppSlotLogsArgs logs) {
            return logs(Output.of(logs));
        }

        /**
         * @param name The Site Credentials Username used for publishing.
         * 
         * @return builder
         * 
         */
        public Builder name(@Nullable Output<String> name) {
            $.name = name;
            return this;
        }

        /**
         * @param name The Site Credentials Username used for publishing.
         * 
         * @return builder
         * 
         */
        public Builder name(String name) {
            return name(Output.of(name));
        }

        /**
         * @param publicNetworkAccessEnabled Should public network access be enabled for the Web App. Defaults to `true`.
         * 
         * @return builder
         * 
         */
        public Builder publicNetworkAccessEnabled(@Nullable Output<Boolean> publicNetworkAccessEnabled) {
            $.publicNetworkAccessEnabled = publicNetworkAccessEnabled;
            return this;
        }

        /**
         * @param publicNetworkAccessEnabled Should public network access be enabled for the Web App. Defaults to `true`.
         * 
         * @return builder
         * 
         */
        public Builder publicNetworkAccessEnabled(Boolean publicNetworkAccessEnabled) {
            return publicNetworkAccessEnabled(Output.of(publicNetworkAccessEnabled));
        }

        /**
         * @param servicePlanId The ID of the Service Plan in which to run this slot. If not specified the same Service Plan as the Windows Web App will be used.
         * 
         * @return builder
         * 
         */
        public Builder servicePlanId(@Nullable Output<String> servicePlanId) {
            $.servicePlanId = servicePlanId;
            return this;
        }

        /**
         * @param servicePlanId The ID of the Service Plan in which to run this slot. If not specified the same Service Plan as the Windows Web App will be used.
         * 
         * @return builder
         * 
         */
        public Builder servicePlanId(String servicePlanId) {
            return servicePlanId(Output.of(servicePlanId));
        }

        /**
         * @param siteConfig A `site_config` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder siteConfig(Output<WindowsWebAppSlotSiteConfigArgs> siteConfig) {
            $.siteConfig = siteConfig;
            return this;
        }

        /**
         * @param siteConfig A `site_config` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder siteConfig(WindowsWebAppSlotSiteConfigArgs siteConfig) {
            return siteConfig(Output.of(siteConfig));
        }

        /**
         * @param storageAccounts One or more `storage_account` blocks as defined below.
         * 
         * &gt; **Note:** Using this value requires `WEBSITE_RUN_FROM_PACKAGE=1` to be set on the App in `app_settings`. Refer to the [Azure docs](https://docs.microsoft.com/en-us/azure/app-service/deploy-run-package) for further details.
         * 
         * @return builder
         * 
         */
        public Builder storageAccounts(@Nullable Output<List<WindowsWebAppSlotStorageAccountArgs>> storageAccounts) {
            $.storageAccounts = storageAccounts;
            return this;
        }

        /**
         * @param storageAccounts One or more `storage_account` blocks as defined below.
         * 
         * &gt; **Note:** Using this value requires `WEBSITE_RUN_FROM_PACKAGE=1` to be set on the App in `app_settings`. Refer to the [Azure docs](https://docs.microsoft.com/en-us/azure/app-service/deploy-run-package) for further details.
         * 
         * @return builder
         * 
         */
        public Builder storageAccounts(List<WindowsWebAppSlotStorageAccountArgs> storageAccounts) {
            return storageAccounts(Output.of(storageAccounts));
        }

        /**
         * @param storageAccounts One or more `storage_account` blocks as defined below.
         * 
         * &gt; **Note:** Using this value requires `WEBSITE_RUN_FROM_PACKAGE=1` to be set on the App in `app_settings`. Refer to the [Azure docs](https://docs.microsoft.com/en-us/azure/app-service/deploy-run-package) for further details.
         * 
         * @return builder
         * 
         */
        public Builder storageAccounts(WindowsWebAppSlotStorageAccountArgs... storageAccounts) {
            return storageAccounts(List.of(storageAccounts));
        }

        /**
         * @param tags A mapping of tags which should be assigned to the Windows Web App Slot.
         * 
         * @return builder
         * 
         */
        public Builder tags(@Nullable Output<Map<String,String>> tags) {
            $.tags = tags;
            return this;
        }

        /**
         * @param tags A mapping of tags which should be assigned to the Windows Web App Slot.
         * 
         * @return builder
         * 
         */
        public Builder tags(Map<String,String> tags) {
            return tags(Output.of(tags));
        }

        public Builder virtualNetworkSubnetId(@Nullable Output<String> virtualNetworkSubnetId) {
            $.virtualNetworkSubnetId = virtualNetworkSubnetId;
            return this;
        }

        public Builder virtualNetworkSubnetId(String virtualNetworkSubnetId) {
            return virtualNetworkSubnetId(Output.of(virtualNetworkSubnetId));
        }

        /**
         * @param zipDeployFile The local path and filename of the Zip packaged application to deploy to this Windows Web App.
         * 
         * @return builder
         * 
         */
        public Builder zipDeployFile(@Nullable Output<String> zipDeployFile) {
            $.zipDeployFile = zipDeployFile;
            return this;
        }

        /**
         * @param zipDeployFile The local path and filename of the Zip packaged application to deploy to this Windows Web App.
         * 
         * @return builder
         * 
         */
        public Builder zipDeployFile(String zipDeployFile) {
            return zipDeployFile(Output.of(zipDeployFile));
        }

        public WindowsWebAppSlotArgs build() {
            $.appServiceId = Objects.requireNonNull($.appServiceId, "expected parameter 'appServiceId' to be non-null");
            $.siteConfig = Objects.requireNonNull($.siteConfig, "expected parameter 'siteConfig' to be non-null");
            return $;
        }
    }

}
