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

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.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


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

    public static final FrontdoorRuleActionsRouteConfigurationOverrideActionArgs Empty = new FrontdoorRuleActionsRouteConfigurationOverrideActionArgs();

    /**
     * `HonorOrigin` the Front Door will always honor origin response header directive. If the origin directive is missing, Front Door will cache contents anywhere from `1` to `3` days. `OverrideAlways` the TTL value returned from your Front Door Origin is overwritten with the value specified in the action. This behavior will only be applied if the response is cacheable. `OverrideIfOriginMissing` if no TTL value gets returned from your Front Door Origin, the rule sets the TTL to the value specified in the action. This behavior will only be applied if the response is cacheable. `Disabled` the Front Door will not cache the response contents, irrespective of Front Door Origin response directives. Possible values include `HonorOrigin`, `OverrideAlways`, `OverrideIfOriginMissing` or `Disabled`.
     * 
     */
    @Import(name="cacheBehavior")
    private @Nullable Output<String> cacheBehavior;

    /**
     * @return `HonorOrigin` the Front Door will always honor origin response header directive. If the origin directive is missing, Front Door will cache contents anywhere from `1` to `3` days. `OverrideAlways` the TTL value returned from your Front Door Origin is overwritten with the value specified in the action. This behavior will only be applied if the response is cacheable. `OverrideIfOriginMissing` if no TTL value gets returned from your Front Door Origin, the rule sets the TTL to the value specified in the action. This behavior will only be applied if the response is cacheable. `Disabled` the Front Door will not cache the response contents, irrespective of Front Door Origin response directives. Possible values include `HonorOrigin`, `OverrideAlways`, `OverrideIfOriginMissing` or `Disabled`.
     * 
     */
    public Optional<Output<String>> cacheBehavior() {
        return Optional.ofNullable(this.cacheBehavior);
    }

    /**
     * When Cache behavior is set to `Override` or `SetIfMissing`, this field specifies the cache duration to use. The maximum duration is 366 days specified in the `d.HH:MM:SS` format(e.g. `365.23:59:59`). If the desired maximum cache duration is less than 1 day then the maximum cache duration should be specified in the `HH:MM:SS` format(e.g. `23:59:59`).
     * 
     */
    @Import(name="cacheDuration")
    private @Nullable Output<String> cacheDuration;

    /**
     * @return When Cache behavior is set to `Override` or `SetIfMissing`, this field specifies the cache duration to use. The maximum duration is 366 days specified in the `d.HH:MM:SS` format(e.g. `365.23:59:59`). If the desired maximum cache duration is less than 1 day then the maximum cache duration should be specified in the `HH:MM:SS` format(e.g. `23:59:59`).
     * 
     */
    public Optional<Output<String>> cacheDuration() {
        return Optional.ofNullable(this.cacheDuration);
    }

    /**
     * The Front Door Origin Group resource ID that the request should be routed to. This overrides the configuration specified in the Front Door Endpoint route.
     * 
     */
    @Import(name="cdnFrontdoorOriginGroupId")
    private @Nullable Output<String> cdnFrontdoorOriginGroupId;

    /**
     * @return The Front Door Origin Group resource ID that the request should be routed to. This overrides the configuration specified in the Front Door Endpoint route.
     * 
     */
    public Optional<Output<String>> cdnFrontdoorOriginGroupId() {
        return Optional.ofNullable(this.cdnFrontdoorOriginGroupId);
    }

    /**
     * Should the Front Door dynamically compress the content? Possible values include `true` or `false`.
     * 
     * -&gt;**NOTE:** Content won&#39;t be compressed on AzureFrontDoor when requested content is smaller than `1 byte` or larger than `1 MB`.
     * 
     */
    @Import(name="compressionEnabled")
    private @Nullable Output<Boolean> compressionEnabled;

    /**
     * @return Should the Front Door dynamically compress the content? Possible values include `true` or `false`.
     * 
     * -&gt;**NOTE:** Content won&#39;t be compressed on AzureFrontDoor when requested content is smaller than `1 byte` or larger than `1 MB`.
     * 
     */
    public Optional<Output<Boolean>> compressionEnabled() {
        return Optional.ofNullable(this.compressionEnabled);
    }

    /**
     * The forwarding protocol the request will be redirected as. This overrides the configuration specified in the route to be associated with. Possible values include `MatchRequest`, `HttpOnly` or `HttpsOnly`.
     * 
     * -&gt;**NOTE:** If the `cdn_frontdoor_origin_group_id` is not defined you cannot set the `forwarding_protocol`.
     * 
     */
    @Import(name="forwardingProtocol")
    private @Nullable Output<String> forwardingProtocol;

    /**
     * @return The forwarding protocol the request will be redirected as. This overrides the configuration specified in the route to be associated with. Possible values include `MatchRequest`, `HttpOnly` or `HttpsOnly`.
     * 
     * -&gt;**NOTE:** If the `cdn_frontdoor_origin_group_id` is not defined you cannot set the `forwarding_protocol`.
     * 
     */
    public Optional<Output<String>> forwardingProtocol() {
        return Optional.ofNullable(this.forwardingProtocol);
    }

    /**
     * `IncludeSpecifiedQueryStrings` query strings specified in the `query_string_parameters` field get included when the cache key gets generated. `UseQueryString` cache every unique URL, each unique URL will have its own cache key. `IgnoreSpecifiedQueryStrings` query strings specified in the `query_string_parameters` field get excluded when the cache key gets generated. `IgnoreQueryString` query strings aren&#39;t considered when the cache key gets generated. Possible values include `IgnoreQueryString`, `UseQueryString`, `IgnoreSpecifiedQueryStrings` or `IncludeSpecifiedQueryStrings`.
     * 
     */
    @Import(name="queryStringCachingBehavior")
    private @Nullable Output<String> queryStringCachingBehavior;

    /**
     * @return `IncludeSpecifiedQueryStrings` query strings specified in the `query_string_parameters` field get included when the cache key gets generated. `UseQueryString` cache every unique URL, each unique URL will have its own cache key. `IgnoreSpecifiedQueryStrings` query strings specified in the `query_string_parameters` field get excluded when the cache key gets generated. `IgnoreQueryString` query strings aren&#39;t considered when the cache key gets generated. Possible values include `IgnoreQueryString`, `UseQueryString`, `IgnoreSpecifiedQueryStrings` or `IncludeSpecifiedQueryStrings`.
     * 
     */
    public Optional<Output<String>> queryStringCachingBehavior() {
        return Optional.ofNullable(this.queryStringCachingBehavior);
    }

    /**
     * A list of query string parameter names.
     * 
     * -&gt;**NOTE:** `query_string_parameters` is a required field when the `query_string_caching_behavior` is set to `IncludeSpecifiedQueryStrings` or `IgnoreSpecifiedQueryStrings`.
     * 
     */
    @Import(name="queryStringParameters")
    private @Nullable Output<List<String>> queryStringParameters;

    /**
     * @return A list of query string parameter names.
     * 
     * -&gt;**NOTE:** `query_string_parameters` is a required field when the `query_string_caching_behavior` is set to `IncludeSpecifiedQueryStrings` or `IgnoreSpecifiedQueryStrings`.
     * 
     */
    public Optional<Output<List<String>>> queryStringParameters() {
        return Optional.ofNullable(this.queryStringParameters);
    }

    private FrontdoorRuleActionsRouteConfigurationOverrideActionArgs() {}

    private FrontdoorRuleActionsRouteConfigurationOverrideActionArgs(FrontdoorRuleActionsRouteConfigurationOverrideActionArgs $) {
        this.cacheBehavior = $.cacheBehavior;
        this.cacheDuration = $.cacheDuration;
        this.cdnFrontdoorOriginGroupId = $.cdnFrontdoorOriginGroupId;
        this.compressionEnabled = $.compressionEnabled;
        this.forwardingProtocol = $.forwardingProtocol;
        this.queryStringCachingBehavior = $.queryStringCachingBehavior;
        this.queryStringParameters = $.queryStringParameters;
    }

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

    public static final class Builder {
        private FrontdoorRuleActionsRouteConfigurationOverrideActionArgs $;

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

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

        /**
         * @param cacheBehavior `HonorOrigin` the Front Door will always honor origin response header directive. If the origin directive is missing, Front Door will cache contents anywhere from `1` to `3` days. `OverrideAlways` the TTL value returned from your Front Door Origin is overwritten with the value specified in the action. This behavior will only be applied if the response is cacheable. `OverrideIfOriginMissing` if no TTL value gets returned from your Front Door Origin, the rule sets the TTL to the value specified in the action. This behavior will only be applied if the response is cacheable. `Disabled` the Front Door will not cache the response contents, irrespective of Front Door Origin response directives. Possible values include `HonorOrigin`, `OverrideAlways`, `OverrideIfOriginMissing` or `Disabled`.
         * 
         * @return builder
         * 
         */
        public Builder cacheBehavior(@Nullable Output<String> cacheBehavior) {
            $.cacheBehavior = cacheBehavior;
            return this;
        }

        /**
         * @param cacheBehavior `HonorOrigin` the Front Door will always honor origin response header directive. If the origin directive is missing, Front Door will cache contents anywhere from `1` to `3` days. `OverrideAlways` the TTL value returned from your Front Door Origin is overwritten with the value specified in the action. This behavior will only be applied if the response is cacheable. `OverrideIfOriginMissing` if no TTL value gets returned from your Front Door Origin, the rule sets the TTL to the value specified in the action. This behavior will only be applied if the response is cacheable. `Disabled` the Front Door will not cache the response contents, irrespective of Front Door Origin response directives. Possible values include `HonorOrigin`, `OverrideAlways`, `OverrideIfOriginMissing` or `Disabled`.
         * 
         * @return builder
         * 
         */
        public Builder cacheBehavior(String cacheBehavior) {
            return cacheBehavior(Output.of(cacheBehavior));
        }

        /**
         * @param cacheDuration When Cache behavior is set to `Override` or `SetIfMissing`, this field specifies the cache duration to use. The maximum duration is 366 days specified in the `d.HH:MM:SS` format(e.g. `365.23:59:59`). If the desired maximum cache duration is less than 1 day then the maximum cache duration should be specified in the `HH:MM:SS` format(e.g. `23:59:59`).
         * 
         * @return builder
         * 
         */
        public Builder cacheDuration(@Nullable Output<String> cacheDuration) {
            $.cacheDuration = cacheDuration;
            return this;
        }

        /**
         * @param cacheDuration When Cache behavior is set to `Override` or `SetIfMissing`, this field specifies the cache duration to use. The maximum duration is 366 days specified in the `d.HH:MM:SS` format(e.g. `365.23:59:59`). If the desired maximum cache duration is less than 1 day then the maximum cache duration should be specified in the `HH:MM:SS` format(e.g. `23:59:59`).
         * 
         * @return builder
         * 
         */
        public Builder cacheDuration(String cacheDuration) {
            return cacheDuration(Output.of(cacheDuration));
        }

        /**
         * @param cdnFrontdoorOriginGroupId The Front Door Origin Group resource ID that the request should be routed to. This overrides the configuration specified in the Front Door Endpoint route.
         * 
         * @return builder
         * 
         */
        public Builder cdnFrontdoorOriginGroupId(@Nullable Output<String> cdnFrontdoorOriginGroupId) {
            $.cdnFrontdoorOriginGroupId = cdnFrontdoorOriginGroupId;
            return this;
        }

        /**
         * @param cdnFrontdoorOriginGroupId The Front Door Origin Group resource ID that the request should be routed to. This overrides the configuration specified in the Front Door Endpoint route.
         * 
         * @return builder
         * 
         */
        public Builder cdnFrontdoorOriginGroupId(String cdnFrontdoorOriginGroupId) {
            return cdnFrontdoorOriginGroupId(Output.of(cdnFrontdoorOriginGroupId));
        }

        /**
         * @param compressionEnabled Should the Front Door dynamically compress the content? Possible values include `true` or `false`.
         * 
         * -&gt;**NOTE:** Content won&#39;t be compressed on AzureFrontDoor when requested content is smaller than `1 byte` or larger than `1 MB`.
         * 
         * @return builder
         * 
         */
        public Builder compressionEnabled(@Nullable Output<Boolean> compressionEnabled) {
            $.compressionEnabled = compressionEnabled;
            return this;
        }

        /**
         * @param compressionEnabled Should the Front Door dynamically compress the content? Possible values include `true` or `false`.
         * 
         * -&gt;**NOTE:** Content won&#39;t be compressed on AzureFrontDoor when requested content is smaller than `1 byte` or larger than `1 MB`.
         * 
         * @return builder
         * 
         */
        public Builder compressionEnabled(Boolean compressionEnabled) {
            return compressionEnabled(Output.of(compressionEnabled));
        }

        /**
         * @param forwardingProtocol The forwarding protocol the request will be redirected as. This overrides the configuration specified in the route to be associated with. Possible values include `MatchRequest`, `HttpOnly` or `HttpsOnly`.
         * 
         * -&gt;**NOTE:** If the `cdn_frontdoor_origin_group_id` is not defined you cannot set the `forwarding_protocol`.
         * 
         * @return builder
         * 
         */
        public Builder forwardingProtocol(@Nullable Output<String> forwardingProtocol) {
            $.forwardingProtocol = forwardingProtocol;
            return this;
        }

        /**
         * @param forwardingProtocol The forwarding protocol the request will be redirected as. This overrides the configuration specified in the route to be associated with. Possible values include `MatchRequest`, `HttpOnly` or `HttpsOnly`.
         * 
         * -&gt;**NOTE:** If the `cdn_frontdoor_origin_group_id` is not defined you cannot set the `forwarding_protocol`.
         * 
         * @return builder
         * 
         */
        public Builder forwardingProtocol(String forwardingProtocol) {
            return forwardingProtocol(Output.of(forwardingProtocol));
        }

        /**
         * @param queryStringCachingBehavior `IncludeSpecifiedQueryStrings` query strings specified in the `query_string_parameters` field get included when the cache key gets generated. `UseQueryString` cache every unique URL, each unique URL will have its own cache key. `IgnoreSpecifiedQueryStrings` query strings specified in the `query_string_parameters` field get excluded when the cache key gets generated. `IgnoreQueryString` query strings aren&#39;t considered when the cache key gets generated. Possible values include `IgnoreQueryString`, `UseQueryString`, `IgnoreSpecifiedQueryStrings` or `IncludeSpecifiedQueryStrings`.
         * 
         * @return builder
         * 
         */
        public Builder queryStringCachingBehavior(@Nullable Output<String> queryStringCachingBehavior) {
            $.queryStringCachingBehavior = queryStringCachingBehavior;
            return this;
        }

        /**
         * @param queryStringCachingBehavior `IncludeSpecifiedQueryStrings` query strings specified in the `query_string_parameters` field get included when the cache key gets generated. `UseQueryString` cache every unique URL, each unique URL will have its own cache key. `IgnoreSpecifiedQueryStrings` query strings specified in the `query_string_parameters` field get excluded when the cache key gets generated. `IgnoreQueryString` query strings aren&#39;t considered when the cache key gets generated. Possible values include `IgnoreQueryString`, `UseQueryString`, `IgnoreSpecifiedQueryStrings` or `IncludeSpecifiedQueryStrings`.
         * 
         * @return builder
         * 
         */
        public Builder queryStringCachingBehavior(String queryStringCachingBehavior) {
            return queryStringCachingBehavior(Output.of(queryStringCachingBehavior));
        }

        /**
         * @param queryStringParameters A list of query string parameter names.
         * 
         * -&gt;**NOTE:** `query_string_parameters` is a required field when the `query_string_caching_behavior` is set to `IncludeSpecifiedQueryStrings` or `IgnoreSpecifiedQueryStrings`.
         * 
         * @return builder
         * 
         */
        public Builder queryStringParameters(@Nullable Output<List<String>> queryStringParameters) {
            $.queryStringParameters = queryStringParameters;
            return this;
        }

        /**
         * @param queryStringParameters A list of query string parameter names.
         * 
         * -&gt;**NOTE:** `query_string_parameters` is a required field when the `query_string_caching_behavior` is set to `IncludeSpecifiedQueryStrings` or `IgnoreSpecifiedQueryStrings`.
         * 
         * @return builder
         * 
         */
        public Builder queryStringParameters(List<String> queryStringParameters) {
            return queryStringParameters(Output.of(queryStringParameters));
        }

        /**
         * @param queryStringParameters A list of query string parameter names.
         * 
         * -&gt;**NOTE:** `query_string_parameters` is a required field when the `query_string_caching_behavior` is set to `IncludeSpecifiedQueryStrings` or `IgnoreSpecifiedQueryStrings`.
         * 
         * @return builder
         * 
         */
        public Builder queryStringParameters(String... queryStringParameters) {
            return queryStringParameters(List.of(queryStringParameters));
        }

        public FrontdoorRuleActionsRouteConfigurationOverrideActionArgs build() {
            return $;
        }
    }

}
