// *** 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.network.inputs;

import com.pulumi.azure.network.inputs.VpnServerConfigurationAzureActiveDirectoryAuthenticationArgs;
import com.pulumi.azure.network.inputs.VpnServerConfigurationClientRevokedCertificateArgs;
import com.pulumi.azure.network.inputs.VpnServerConfigurationClientRootCertificateArgs;
import com.pulumi.azure.network.inputs.VpnServerConfigurationIpsecPolicyArgs;
import com.pulumi.azure.network.inputs.VpnServerConfigurationRadiusArgs;
import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
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 VpnServerConfigurationState extends com.pulumi.resources.ResourceArgs {

    public static final VpnServerConfigurationState Empty = new VpnServerConfigurationState();

    /**
     * A `azure_active_directory_authentication` block as defined below.
     * 
     */
    @Import(name="azureActiveDirectoryAuthentications")
    private @Nullable Output<List<VpnServerConfigurationAzureActiveDirectoryAuthenticationArgs>> azureActiveDirectoryAuthentications;

    /**
     * @return A `azure_active_directory_authentication` block as defined below.
     * 
     */
    public Optional<Output<List<VpnServerConfigurationAzureActiveDirectoryAuthenticationArgs>>> azureActiveDirectoryAuthentications() {
        return Optional.ofNullable(this.azureActiveDirectoryAuthentications);
    }

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

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

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

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

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

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

    /**
     * The Azure location where this VPN Server Configuration should be created. Changing this forces a new resource to be created.
     * 
     */
    @Import(name="location")
    private @Nullable Output<String> location;

    /**
     * @return The Azure location where this VPN Server Configuration should be created. Changing this forces a new resource to be created.
     * 
     */
    public Optional<Output<String>> location() {
        return Optional.ofNullable(this.location);
    }

    /**
     * The Name which should be used for this VPN Server Configuration. Changing this forces a new resource to be created.
     * 
     */
    @Import(name="name")
    private @Nullable Output<String> name;

    /**
     * @return The Name which should be used for this VPN Server Configuration. Changing this forces a new resource to be created.
     * 
     */
    public Optional<Output<String>> name() {
        return Optional.ofNullable(this.name);
    }

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

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

    /**
     * The Name of the Resource Group in which this VPN Server Configuration should be created. Changing this forces a new resource to be created.
     * 
     */
    @Import(name="resourceGroupName")
    private @Nullable Output<String> resourceGroupName;

    /**
     * @return The Name of the Resource Group in which this VPN Server Configuration should be created. Changing this forces a new resource to be created.
     * 
     */
    public Optional<Output<String>> resourceGroupName() {
        return Optional.ofNullable(this.resourceGroupName);
    }

    /**
     * A mapping of tags to assign to the resource.
     * 
     */
    @Import(name="tags")
    private @Nullable Output<Map<String,String>> tags;

    /**
     * @return A mapping of tags to assign to the resource.
     * 
     */
    public Optional<Output<Map<String,String>>> tags() {
        return Optional.ofNullable(this.tags);
    }

    /**
     * A list of Authentication Types applicable for this VPN Server Configuration. Possible values are `AAD` (Azure Active Directory), `Certificate` and `Radius`.
     * 
     */
    @Import(name="vpnAuthenticationTypes")
    private @Nullable Output<List<String>> vpnAuthenticationTypes;

    /**
     * @return A list of Authentication Types applicable for this VPN Server Configuration. Possible values are `AAD` (Azure Active Directory), `Certificate` and `Radius`.
     * 
     */
    public Optional<Output<List<String>>> vpnAuthenticationTypes() {
        return Optional.ofNullable(this.vpnAuthenticationTypes);
    }

    /**
     * A list of VPN Protocols to use for this Server Configuration. Possible values are `IkeV2` and `OpenVPN`.
     * 
     */
    @Import(name="vpnProtocols")
    private @Nullable Output<List<String>> vpnProtocols;

    /**
     * @return A list of VPN Protocols to use for this Server Configuration. Possible values are `IkeV2` and `OpenVPN`.
     * 
     */
    public Optional<Output<List<String>>> vpnProtocols() {
        return Optional.ofNullable(this.vpnProtocols);
    }

    private VpnServerConfigurationState() {}

    private VpnServerConfigurationState(VpnServerConfigurationState $) {
        this.azureActiveDirectoryAuthentications = $.azureActiveDirectoryAuthentications;
        this.clientRevokedCertificates = $.clientRevokedCertificates;
        this.clientRootCertificates = $.clientRootCertificates;
        this.ipsecPolicy = $.ipsecPolicy;
        this.location = $.location;
        this.name = $.name;
        this.radius = $.radius;
        this.resourceGroupName = $.resourceGroupName;
        this.tags = $.tags;
        this.vpnAuthenticationTypes = $.vpnAuthenticationTypes;
        this.vpnProtocols = $.vpnProtocols;
    }

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

    public static final class Builder {
        private VpnServerConfigurationState $;

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

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

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

        /**
         * @param azureActiveDirectoryAuthentications A `azure_active_directory_authentication` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder azureActiveDirectoryAuthentications(List<VpnServerConfigurationAzureActiveDirectoryAuthenticationArgs> azureActiveDirectoryAuthentications) {
            return azureActiveDirectoryAuthentications(Output.of(azureActiveDirectoryAuthentications));
        }

        /**
         * @param azureActiveDirectoryAuthentications A `azure_active_directory_authentication` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder azureActiveDirectoryAuthentications(VpnServerConfigurationAzureActiveDirectoryAuthenticationArgs... azureActiveDirectoryAuthentications) {
            return azureActiveDirectoryAuthentications(List.of(azureActiveDirectoryAuthentications));
        }

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

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

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

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

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

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

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

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

        /**
         * @param location The Azure location where this VPN Server Configuration should be created. Changing this forces a new resource to be created.
         * 
         * @return builder
         * 
         */
        public Builder location(@Nullable Output<String> location) {
            $.location = location;
            return this;
        }

        /**
         * @param location The Azure location where this VPN Server Configuration should be created. Changing this forces a new resource to be created.
         * 
         * @return builder
         * 
         */
        public Builder location(String location) {
            return location(Output.of(location));
        }

        /**
         * @param name The Name which should be used for this VPN Server Configuration. Changing this forces a new resource to be created.
         * 
         * @return builder
         * 
         */
        public Builder name(@Nullable Output<String> name) {
            $.name = name;
            return this;
        }

        /**
         * @param name The Name which should be used for this VPN Server Configuration. Changing this forces a new resource to be created.
         * 
         * @return builder
         * 
         */
        public Builder name(String name) {
            return name(Output.of(name));
        }

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

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

        /**
         * @param resourceGroupName The Name of the Resource Group in which this VPN Server Configuration should be created. Changing this forces a new resource to be created.
         * 
         * @return builder
         * 
         */
        public Builder resourceGroupName(@Nullable Output<String> resourceGroupName) {
            $.resourceGroupName = resourceGroupName;
            return this;
        }

        /**
         * @param resourceGroupName The Name of the Resource Group in which this VPN Server Configuration should be created. Changing this forces a new resource to be created.
         * 
         * @return builder
         * 
         */
        public Builder resourceGroupName(String resourceGroupName) {
            return resourceGroupName(Output.of(resourceGroupName));
        }

        /**
         * @param tags A mapping of tags to assign to the resource.
         * 
         * @return builder
         * 
         */
        public Builder tags(@Nullable Output<Map<String,String>> tags) {
            $.tags = tags;
            return this;
        }

        /**
         * @param tags A mapping of tags to assign to the resource.
         * 
         * @return builder
         * 
         */
        public Builder tags(Map<String,String> tags) {
            return tags(Output.of(tags));
        }

        /**
         * @param vpnAuthenticationTypes A list of Authentication Types applicable for this VPN Server Configuration. Possible values are `AAD` (Azure Active Directory), `Certificate` and `Radius`.
         * 
         * @return builder
         * 
         */
        public Builder vpnAuthenticationTypes(@Nullable Output<List<String>> vpnAuthenticationTypes) {
            $.vpnAuthenticationTypes = vpnAuthenticationTypes;
            return this;
        }

        /**
         * @param vpnAuthenticationTypes A list of Authentication Types applicable for this VPN Server Configuration. Possible values are `AAD` (Azure Active Directory), `Certificate` and `Radius`.
         * 
         * @return builder
         * 
         */
        public Builder vpnAuthenticationTypes(List<String> vpnAuthenticationTypes) {
            return vpnAuthenticationTypes(Output.of(vpnAuthenticationTypes));
        }

        /**
         * @param vpnAuthenticationTypes A list of Authentication Types applicable for this VPN Server Configuration. Possible values are `AAD` (Azure Active Directory), `Certificate` and `Radius`.
         * 
         * @return builder
         * 
         */
        public Builder vpnAuthenticationTypes(String... vpnAuthenticationTypes) {
            return vpnAuthenticationTypes(List.of(vpnAuthenticationTypes));
        }

        /**
         * @param vpnProtocols A list of VPN Protocols to use for this Server Configuration. Possible values are `IkeV2` and `OpenVPN`.
         * 
         * @return builder
         * 
         */
        public Builder vpnProtocols(@Nullable Output<List<String>> vpnProtocols) {
            $.vpnProtocols = vpnProtocols;
            return this;
        }

        /**
         * @param vpnProtocols A list of VPN Protocols to use for this Server Configuration. Possible values are `IkeV2` and `OpenVPN`.
         * 
         * @return builder
         * 
         */
        public Builder vpnProtocols(List<String> vpnProtocols) {
            return vpnProtocols(Output.of(vpnProtocols));
        }

        /**
         * @param vpnProtocols A list of VPN Protocols to use for this Server Configuration. Possible values are `IkeV2` and `OpenVPN`.
         * 
         * @return builder
         * 
         */
        public Builder vpnProtocols(String... vpnProtocols) {
            return vpnProtocols(List.of(vpnProtocols));
        }

        public VpnServerConfigurationState build() {
            return $;
        }
    }

}
