// *** 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.core.Output;
import com.pulumi.core.annotations.Import;
import java.lang.String;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


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

    public static final ApplicationGatewayUrlPathMapPathRuleArgs Empty = new ApplicationGatewayUrlPathMapPathRuleArgs();

    /**
     * The ID of the associated Backend Address Pool.
     * 
     */
    @Import(name="backendAddressPoolId")
    private @Nullable Output<String> backendAddressPoolId;

    /**
     * @return The ID of the associated Backend Address Pool.
     * 
     */
    public Optional<Output<String>> backendAddressPoolId() {
        return Optional.ofNullable(this.backendAddressPoolId);
    }

    /**
     * The Name of the Backend Address Pool to use for this Path Rule. Cannot be set if `redirect_configuration_name` is set.
     * 
     */
    @Import(name="backendAddressPoolName")
    private @Nullable Output<String> backendAddressPoolName;

    /**
     * @return The Name of the Backend Address Pool to use for this Path Rule. Cannot be set if `redirect_configuration_name` is set.
     * 
     */
    public Optional<Output<String>> backendAddressPoolName() {
        return Optional.ofNullable(this.backendAddressPoolName);
    }

    /**
     * The ID of the associated Backend HTTP Settings Configuration.
     * 
     */
    @Import(name="backendHttpSettingsId")
    private @Nullable Output<String> backendHttpSettingsId;

    /**
     * @return The ID of the associated Backend HTTP Settings Configuration.
     * 
     */
    public Optional<Output<String>> backendHttpSettingsId() {
        return Optional.ofNullable(this.backendHttpSettingsId);
    }

    /**
     * The Name of the Backend HTTP Settings Collection to use for this Path Rule. Cannot be set if `redirect_configuration_name` is set.
     * 
     */
    @Import(name="backendHttpSettingsName")
    private @Nullable Output<String> backendHttpSettingsName;

    /**
     * @return The Name of the Backend HTTP Settings Collection to use for this Path Rule. Cannot be set if `redirect_configuration_name` is set.
     * 
     */
    public Optional<Output<String>> backendHttpSettingsName() {
        return Optional.ofNullable(this.backendHttpSettingsName);
    }

    /**
     * The ID of the Web Application Firewall Policy which should be used as a HTTP Listener.
     * 
     */
    @Import(name="firewallPolicyId")
    private @Nullable Output<String> firewallPolicyId;

    /**
     * @return The ID of the Web Application Firewall Policy which should be used as a HTTP Listener.
     * 
     */
    public Optional<Output<String>> firewallPolicyId() {
        return Optional.ofNullable(this.firewallPolicyId);
    }

    /**
     * The ID of the Rewrite Rule Set
     * 
     */
    @Import(name="id")
    private @Nullable Output<String> id;

    /**
     * @return The ID of the Rewrite Rule Set
     * 
     */
    public Optional<Output<String>> id() {
        return Optional.ofNullable(this.id);
    }

    /**
     * The Name of the Path Rule.
     * 
     */
    @Import(name="name", required=true)
    private Output<String> name;

    /**
     * @return The Name of the Path Rule.
     * 
     */
    public Output<String> name() {
        return this.name;
    }

    /**
     * A list of Paths used in this Path Rule.
     * 
     */
    @Import(name="paths", required=true)
    private Output<List<String>> paths;

    /**
     * @return A list of Paths used in this Path Rule.
     * 
     */
    public Output<List<String>> paths() {
        return this.paths;
    }

    /**
     * The ID of the associated Redirect Configuration.
     * 
     */
    @Import(name="redirectConfigurationId")
    private @Nullable Output<String> redirectConfigurationId;

    /**
     * @return The ID of the associated Redirect Configuration.
     * 
     */
    public Optional<Output<String>> redirectConfigurationId() {
        return Optional.ofNullable(this.redirectConfigurationId);
    }

    /**
     * The Name of a Redirect Configuration to use for this Path Rule. Cannot be set if `backend_address_pool_name` or `backend_http_settings_name` is set.
     * 
     */
    @Import(name="redirectConfigurationName")
    private @Nullable Output<String> redirectConfigurationName;

    /**
     * @return The Name of a Redirect Configuration to use for this Path Rule. Cannot be set if `backend_address_pool_name` or `backend_http_settings_name` is set.
     * 
     */
    public Optional<Output<String>> redirectConfigurationName() {
        return Optional.ofNullable(this.redirectConfigurationName);
    }

    /**
     * The ID of the associated Rewrite Rule Set.
     * 
     */
    @Import(name="rewriteRuleSetId")
    private @Nullable Output<String> rewriteRuleSetId;

    /**
     * @return The ID of the associated Rewrite Rule Set.
     * 
     */
    public Optional<Output<String>> rewriteRuleSetId() {
        return Optional.ofNullable(this.rewriteRuleSetId);
    }

    /**
     * The Name of the Rewrite Rule Set which should be used for this URL Path Map. Only valid for v2 SKUs.
     * 
     */
    @Import(name="rewriteRuleSetName")
    private @Nullable Output<String> rewriteRuleSetName;

    /**
     * @return The Name of the Rewrite Rule Set which should be used for this URL Path Map. Only valid for v2 SKUs.
     * 
     */
    public Optional<Output<String>> rewriteRuleSetName() {
        return Optional.ofNullable(this.rewriteRuleSetName);
    }

    private ApplicationGatewayUrlPathMapPathRuleArgs() {}

    private ApplicationGatewayUrlPathMapPathRuleArgs(ApplicationGatewayUrlPathMapPathRuleArgs $) {
        this.backendAddressPoolId = $.backendAddressPoolId;
        this.backendAddressPoolName = $.backendAddressPoolName;
        this.backendHttpSettingsId = $.backendHttpSettingsId;
        this.backendHttpSettingsName = $.backendHttpSettingsName;
        this.firewallPolicyId = $.firewallPolicyId;
        this.id = $.id;
        this.name = $.name;
        this.paths = $.paths;
        this.redirectConfigurationId = $.redirectConfigurationId;
        this.redirectConfigurationName = $.redirectConfigurationName;
        this.rewriteRuleSetId = $.rewriteRuleSetId;
        this.rewriteRuleSetName = $.rewriteRuleSetName;
    }

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

    public static final class Builder {
        private ApplicationGatewayUrlPathMapPathRuleArgs $;

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

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

        /**
         * @param backendAddressPoolId The ID of the associated Backend Address Pool.
         * 
         * @return builder
         * 
         */
        public Builder backendAddressPoolId(@Nullable Output<String> backendAddressPoolId) {
            $.backendAddressPoolId = backendAddressPoolId;
            return this;
        }

        /**
         * @param backendAddressPoolId The ID of the associated Backend Address Pool.
         * 
         * @return builder
         * 
         */
        public Builder backendAddressPoolId(String backendAddressPoolId) {
            return backendAddressPoolId(Output.of(backendAddressPoolId));
        }

        /**
         * @param backendAddressPoolName The Name of the Backend Address Pool to use for this Path Rule. Cannot be set if `redirect_configuration_name` is set.
         * 
         * @return builder
         * 
         */
        public Builder backendAddressPoolName(@Nullable Output<String> backendAddressPoolName) {
            $.backendAddressPoolName = backendAddressPoolName;
            return this;
        }

        /**
         * @param backendAddressPoolName The Name of the Backend Address Pool to use for this Path Rule. Cannot be set if `redirect_configuration_name` is set.
         * 
         * @return builder
         * 
         */
        public Builder backendAddressPoolName(String backendAddressPoolName) {
            return backendAddressPoolName(Output.of(backendAddressPoolName));
        }

        /**
         * @param backendHttpSettingsId The ID of the associated Backend HTTP Settings Configuration.
         * 
         * @return builder
         * 
         */
        public Builder backendHttpSettingsId(@Nullable Output<String> backendHttpSettingsId) {
            $.backendHttpSettingsId = backendHttpSettingsId;
            return this;
        }

        /**
         * @param backendHttpSettingsId The ID of the associated Backend HTTP Settings Configuration.
         * 
         * @return builder
         * 
         */
        public Builder backendHttpSettingsId(String backendHttpSettingsId) {
            return backendHttpSettingsId(Output.of(backendHttpSettingsId));
        }

        /**
         * @param backendHttpSettingsName The Name of the Backend HTTP Settings Collection to use for this Path Rule. Cannot be set if `redirect_configuration_name` is set.
         * 
         * @return builder
         * 
         */
        public Builder backendHttpSettingsName(@Nullable Output<String> backendHttpSettingsName) {
            $.backendHttpSettingsName = backendHttpSettingsName;
            return this;
        }

        /**
         * @param backendHttpSettingsName The Name of the Backend HTTP Settings Collection to use for this Path Rule. Cannot be set if `redirect_configuration_name` is set.
         * 
         * @return builder
         * 
         */
        public Builder backendHttpSettingsName(String backendHttpSettingsName) {
            return backendHttpSettingsName(Output.of(backendHttpSettingsName));
        }

        /**
         * @param firewallPolicyId The ID of the Web Application Firewall Policy which should be used as a HTTP Listener.
         * 
         * @return builder
         * 
         */
        public Builder firewallPolicyId(@Nullable Output<String> firewallPolicyId) {
            $.firewallPolicyId = firewallPolicyId;
            return this;
        }

        /**
         * @param firewallPolicyId The ID of the Web Application Firewall Policy which should be used as a HTTP Listener.
         * 
         * @return builder
         * 
         */
        public Builder firewallPolicyId(String firewallPolicyId) {
            return firewallPolicyId(Output.of(firewallPolicyId));
        }

        /**
         * @param id The ID of the Rewrite Rule Set
         * 
         * @return builder
         * 
         */
        public Builder id(@Nullable Output<String> id) {
            $.id = id;
            return this;
        }

        /**
         * @param id The ID of the Rewrite Rule Set
         * 
         * @return builder
         * 
         */
        public Builder id(String id) {
            return id(Output.of(id));
        }

        /**
         * @param name The Name of the Path Rule.
         * 
         * @return builder
         * 
         */
        public Builder name(Output<String> name) {
            $.name = name;
            return this;
        }

        /**
         * @param name The Name of the Path Rule.
         * 
         * @return builder
         * 
         */
        public Builder name(String name) {
            return name(Output.of(name));
        }

        /**
         * @param paths A list of Paths used in this Path Rule.
         * 
         * @return builder
         * 
         */
        public Builder paths(Output<List<String>> paths) {
            $.paths = paths;
            return this;
        }

        /**
         * @param paths A list of Paths used in this Path Rule.
         * 
         * @return builder
         * 
         */
        public Builder paths(List<String> paths) {
            return paths(Output.of(paths));
        }

        /**
         * @param paths A list of Paths used in this Path Rule.
         * 
         * @return builder
         * 
         */
        public Builder paths(String... paths) {
            return paths(List.of(paths));
        }

        /**
         * @param redirectConfigurationId The ID of the associated Redirect Configuration.
         * 
         * @return builder
         * 
         */
        public Builder redirectConfigurationId(@Nullable Output<String> redirectConfigurationId) {
            $.redirectConfigurationId = redirectConfigurationId;
            return this;
        }

        /**
         * @param redirectConfigurationId The ID of the associated Redirect Configuration.
         * 
         * @return builder
         * 
         */
        public Builder redirectConfigurationId(String redirectConfigurationId) {
            return redirectConfigurationId(Output.of(redirectConfigurationId));
        }

        /**
         * @param redirectConfigurationName The Name of a Redirect Configuration to use for this Path Rule. Cannot be set if `backend_address_pool_name` or `backend_http_settings_name` is set.
         * 
         * @return builder
         * 
         */
        public Builder redirectConfigurationName(@Nullable Output<String> redirectConfigurationName) {
            $.redirectConfigurationName = redirectConfigurationName;
            return this;
        }

        /**
         * @param redirectConfigurationName The Name of a Redirect Configuration to use for this Path Rule. Cannot be set if `backend_address_pool_name` or `backend_http_settings_name` is set.
         * 
         * @return builder
         * 
         */
        public Builder redirectConfigurationName(String redirectConfigurationName) {
            return redirectConfigurationName(Output.of(redirectConfigurationName));
        }

        /**
         * @param rewriteRuleSetId The ID of the associated Rewrite Rule Set.
         * 
         * @return builder
         * 
         */
        public Builder rewriteRuleSetId(@Nullable Output<String> rewriteRuleSetId) {
            $.rewriteRuleSetId = rewriteRuleSetId;
            return this;
        }

        /**
         * @param rewriteRuleSetId The ID of the associated Rewrite Rule Set.
         * 
         * @return builder
         * 
         */
        public Builder rewriteRuleSetId(String rewriteRuleSetId) {
            return rewriteRuleSetId(Output.of(rewriteRuleSetId));
        }

        /**
         * @param rewriteRuleSetName The Name of the Rewrite Rule Set which should be used for this URL Path Map. Only valid for v2 SKUs.
         * 
         * @return builder
         * 
         */
        public Builder rewriteRuleSetName(@Nullable Output<String> rewriteRuleSetName) {
            $.rewriteRuleSetName = rewriteRuleSetName;
            return this;
        }

        /**
         * @param rewriteRuleSetName The Name of the Rewrite Rule Set which should be used for this URL Path Map. Only valid for v2 SKUs.
         * 
         * @return builder
         * 
         */
        public Builder rewriteRuleSetName(String rewriteRuleSetName) {
            return rewriteRuleSetName(Output.of(rewriteRuleSetName));
        }

        public ApplicationGatewayUrlPathMapPathRuleArgs build() {
            $.name = Objects.requireNonNull($.name, "expected parameter 'name' to be non-null");
            $.paths = Objects.requireNonNull($.paths, "expected parameter 'paths' to be non-null");
            return $;
        }
    }

}
