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

import com.pulumi.aws.cloudfront.inputs.DistributionCustomErrorResponseArgs;
import com.pulumi.aws.cloudfront.inputs.DistributionDefaultCacheBehaviorArgs;
import com.pulumi.aws.cloudfront.inputs.DistributionLoggingConfigArgs;
import com.pulumi.aws.cloudfront.inputs.DistributionOrderedCacheBehaviorArgs;
import com.pulumi.aws.cloudfront.inputs.DistributionOriginArgs;
import com.pulumi.aws.cloudfront.inputs.DistributionOriginGroupArgs;
import com.pulumi.aws.cloudfront.inputs.DistributionRestrictionsArgs;
import com.pulumi.aws.cloudfront.inputs.DistributionTrustedKeyGroupArgs;
import com.pulumi.aws.cloudfront.inputs.DistributionTrustedSignerArgs;
import com.pulumi.aws.cloudfront.inputs.DistributionViewerCertificateArgs;
import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import java.lang.Boolean;
import java.lang.Integer;
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 DistributionState extends com.pulumi.resources.ResourceArgs {

    public static final DistributionState Empty = new DistributionState();

    /**
     * Extra CNAMEs (alternate domain names), if any, for this distribution.
     * 
     */
    @Import(name="aliases")
    private @Nullable Output<List<String>> aliases;

    /**
     * @return Extra CNAMEs (alternate domain names), if any, for this distribution.
     * 
     */
    public Optional<Output<List<String>>> aliases() {
        return Optional.ofNullable(this.aliases);
    }

    /**
     * ARN for the distribution. For example: `arn:aws:cloudfront::123456789012:distribution/EDFDVBD632BHDS5`, where `123456789012` is your AWS account ID.
     * 
     */
    @Import(name="arn")
    private @Nullable Output<String> arn;

    /**
     * @return ARN for the distribution. For example: `arn:aws:cloudfront::123456789012:distribution/EDFDVBD632BHDS5`, where `123456789012` is your AWS account ID.
     * 
     */
    public Optional<Output<String>> arn() {
        return Optional.ofNullable(this.arn);
    }

    /**
     * Internal value used by CloudFront to allow future updates to the distribution configuration.
     * 
     */
    @Import(name="callerReference")
    private @Nullable Output<String> callerReference;

    /**
     * @return Internal value used by CloudFront to allow future updates to the distribution configuration.
     * 
     */
    public Optional<Output<String>> callerReference() {
        return Optional.ofNullable(this.callerReference);
    }

    /**
     * Any comments you want to include about the distribution.
     * 
     */
    @Import(name="comment")
    private @Nullable Output<String> comment;

    /**
     * @return Any comments you want to include about the distribution.
     * 
     */
    public Optional<Output<String>> comment() {
        return Optional.ofNullable(this.comment);
    }

    /**
     * One or more custom error response elements (multiples allowed).
     * 
     */
    @Import(name="customErrorResponses")
    private @Nullable Output<List<DistributionCustomErrorResponseArgs>> customErrorResponses;

    /**
     * @return One or more custom error response elements (multiples allowed).
     * 
     */
    public Optional<Output<List<DistributionCustomErrorResponseArgs>>> customErrorResponses() {
        return Optional.ofNullable(this.customErrorResponses);
    }

    /**
     * Default cache behavior for this distribution (maximum one). Requires either `cache_policy_id` (preferred) or `forwarded_values` (deprecated) be set.
     * 
     */
    @Import(name="defaultCacheBehavior")
    private @Nullable Output<DistributionDefaultCacheBehaviorArgs> defaultCacheBehavior;

    /**
     * @return Default cache behavior for this distribution (maximum one). Requires either `cache_policy_id` (preferred) or `forwarded_values` (deprecated) be set.
     * 
     */
    public Optional<Output<DistributionDefaultCacheBehaviorArgs>> defaultCacheBehavior() {
        return Optional.ofNullable(this.defaultCacheBehavior);
    }

    /**
     * Object that you want CloudFront to return (for example, index.html) when an end user requests the root URL.
     * 
     */
    @Import(name="defaultRootObject")
    private @Nullable Output<String> defaultRootObject;

    /**
     * @return Object that you want CloudFront to return (for example, index.html) when an end user requests the root URL.
     * 
     */
    public Optional<Output<String>> defaultRootObject() {
        return Optional.ofNullable(this.defaultRootObject);
    }

    /**
     * DNS domain name of either the S3 bucket, or web site of your custom origin.
     * 
     */
    @Import(name="domainName")
    private @Nullable Output<String> domainName;

    /**
     * @return DNS domain name of either the S3 bucket, or web site of your custom origin.
     * 
     */
    public Optional<Output<String>> domainName() {
        return Optional.ofNullable(this.domainName);
    }

    /**
     * Whether the distribution is enabled to accept end user requests for content.
     * 
     */
    @Import(name="enabled")
    private @Nullable Output<Boolean> enabled;

    /**
     * @return Whether the distribution is enabled to accept end user requests for content.
     * 
     */
    public Optional<Output<Boolean>> enabled() {
        return Optional.ofNullable(this.enabled);
    }

    /**
     * Current version of the distribution&#39;s information. For example: `E2QWRUHAPOMQZL`.
     * 
     */
    @Import(name="etag")
    private @Nullable Output<String> etag;

    /**
     * @return Current version of the distribution&#39;s information. For example: `E2QWRUHAPOMQZL`.
     * 
     */
    public Optional<Output<String>> etag() {
        return Optional.ofNullable(this.etag);
    }

    /**
     * CloudFront Route 53 zone ID that can be used to route an [Alias Resource Record Set](http://docs.aws.amazon.com/Route53/latest/APIReference/CreateAliasRRSAPI.html) to. This attribute is simply an alias for the zone ID `Z2FDTNDATAQYW2`.
     * 
     */
    @Import(name="hostedZoneId")
    private @Nullable Output<String> hostedZoneId;

    /**
     * @return CloudFront Route 53 zone ID that can be used to route an [Alias Resource Record Set](http://docs.aws.amazon.com/Route53/latest/APIReference/CreateAliasRRSAPI.html) to. This attribute is simply an alias for the zone ID `Z2FDTNDATAQYW2`.
     * 
     */
    public Optional<Output<String>> hostedZoneId() {
        return Optional.ofNullable(this.hostedZoneId);
    }

    /**
     * Maximum HTTP version to support on the distribution. Allowed values are `http1.1`, `http2`, `http2and3` and `http3`. The default is `http2`.
     * 
     */
    @Import(name="httpVersion")
    private @Nullable Output<String> httpVersion;

    /**
     * @return Maximum HTTP version to support on the distribution. Allowed values are `http1.1`, `http2`, `http2and3` and `http3`. The default is `http2`.
     * 
     */
    public Optional<Output<String>> httpVersion() {
        return Optional.ofNullable(this.httpVersion);
    }

    /**
     * Number of invalidation batches currently in progress.
     * 
     */
    @Import(name="inProgressValidationBatches")
    private @Nullable Output<Integer> inProgressValidationBatches;

    /**
     * @return Number of invalidation batches currently in progress.
     * 
     */
    public Optional<Output<Integer>> inProgressValidationBatches() {
        return Optional.ofNullable(this.inProgressValidationBatches);
    }

    /**
     * Whether the IPv6 is enabled for the distribution.
     * 
     */
    @Import(name="isIpv6Enabled")
    private @Nullable Output<Boolean> isIpv6Enabled;

    /**
     * @return Whether the IPv6 is enabled for the distribution.
     * 
     */
    public Optional<Output<Boolean>> isIpv6Enabled() {
        return Optional.ofNullable(this.isIpv6Enabled);
    }

    /**
     * Date and time the distribution was last modified.
     * 
     */
    @Import(name="lastModifiedTime")
    private @Nullable Output<String> lastModifiedTime;

    /**
     * @return Date and time the distribution was last modified.
     * 
     */
    public Optional<Output<String>> lastModifiedTime() {
        return Optional.ofNullable(this.lastModifiedTime);
    }

    /**
     * The logging configuration that controls how logs are written to your distribution (maximum one).
     * 
     */
    @Import(name="loggingConfig")
    private @Nullable Output<DistributionLoggingConfigArgs> loggingConfig;

    /**
     * @return The logging configuration that controls how logs are written to your distribution (maximum one).
     * 
     */
    public Optional<Output<DistributionLoggingConfigArgs>> loggingConfig() {
        return Optional.ofNullable(this.loggingConfig);
    }

    /**
     * Ordered list of cache behaviors resource for this distribution. List from top to bottom in order of precedence. The topmost cache behavior will have precedence 0.
     * 
     */
    @Import(name="orderedCacheBehaviors")
    private @Nullable Output<List<DistributionOrderedCacheBehaviorArgs>> orderedCacheBehaviors;

    /**
     * @return Ordered list of cache behaviors resource for this distribution. List from top to bottom in order of precedence. The topmost cache behavior will have precedence 0.
     * 
     */
    public Optional<Output<List<DistributionOrderedCacheBehaviorArgs>>> orderedCacheBehaviors() {
        return Optional.ofNullable(this.orderedCacheBehaviors);
    }

    /**
     * One or more origin_group for this distribution (multiples allowed).
     * 
     */
    @Import(name="originGroups")
    private @Nullable Output<List<DistributionOriginGroupArgs>> originGroups;

    /**
     * @return One or more origin_group for this distribution (multiples allowed).
     * 
     */
    public Optional<Output<List<DistributionOriginGroupArgs>>> originGroups() {
        return Optional.ofNullable(this.originGroups);
    }

    /**
     * One or more origins for this distribution (multiples allowed).
     * 
     */
    @Import(name="origins")
    private @Nullable Output<List<DistributionOriginArgs>> origins;

    /**
     * @return One or more origins for this distribution (multiples allowed).
     * 
     */
    public Optional<Output<List<DistributionOriginArgs>>> origins() {
        return Optional.ofNullable(this.origins);
    }

    /**
     * Price class for this distribution. One of `PriceClass_All`, `PriceClass_200`, `PriceClass_100`.
     * 
     */
    @Import(name="priceClass")
    private @Nullable Output<String> priceClass;

    /**
     * @return Price class for this distribution. One of `PriceClass_All`, `PriceClass_200`, `PriceClass_100`.
     * 
     */
    public Optional<Output<String>> priceClass() {
        return Optional.ofNullable(this.priceClass);
    }

    /**
     * The restriction configuration for this distribution (maximum one).
     * 
     */
    @Import(name="restrictions")
    private @Nullable Output<DistributionRestrictionsArgs> restrictions;

    /**
     * @return The restriction configuration for this distribution (maximum one).
     * 
     */
    public Optional<Output<DistributionRestrictionsArgs>> restrictions() {
        return Optional.ofNullable(this.restrictions);
    }

    /**
     * Disables the distribution instead of deleting it when destroying the resource through the provider. If this is set, the distribution needs to be deleted manually afterwards. Default: `false`.
     * 
     */
    @Import(name="retainOnDelete")
    private @Nullable Output<Boolean> retainOnDelete;

    /**
     * @return Disables the distribution instead of deleting it when destroying the resource through the provider. If this is set, the distribution needs to be deleted manually afterwards. Default: `false`.
     * 
     */
    public Optional<Output<Boolean>> retainOnDelete() {
        return Optional.ofNullable(this.retainOnDelete);
    }

    /**
     * Current status of the distribution. `Deployed` if the distribution&#39;s information is fully propagated throughout the Amazon CloudFront system.
     * 
     */
    @Import(name="status")
    private @Nullable Output<String> status;

    /**
     * @return Current status of the distribution. `Deployed` if the distribution&#39;s information is fully propagated throughout the Amazon CloudFront system.
     * 
     */
    public Optional<Output<String>> status() {
        return Optional.ofNullable(this.status);
    }

    /**
     * A map of tags to assign to the resource. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
     * 
     */
    @Import(name="tags")
    private @Nullable Output<Map<String,String>> tags;

    /**
     * @return A map of tags to assign to the resource. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
     * 
     */
    public Optional<Output<Map<String,String>>> tags() {
        return Optional.ofNullable(this.tags);
    }

    /**
     * Map of tags assigned to the resource, including those inherited from the provider `default_tags` configuration block.
     * 
     */
    @Import(name="tagsAll")
    private @Nullable Output<Map<String,String>> tagsAll;

    /**
     * @return Map of tags assigned to the resource, including those inherited from the provider `default_tags` configuration block.
     * 
     */
    public Optional<Output<Map<String,String>>> tagsAll() {
        return Optional.ofNullable(this.tagsAll);
    }

    /**
     * List of key group IDs that CloudFront can use to validate signed URLs or signed cookies. See the [CloudFront User Guide](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-trusted-signers.html) for more information about this feature.
     * 
     */
    @Import(name="trustedKeyGroups")
    private @Nullable Output<List<DistributionTrustedKeyGroupArgs>> trustedKeyGroups;

    /**
     * @return List of key group IDs that CloudFront can use to validate signed URLs or signed cookies. See the [CloudFront User Guide](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-trusted-signers.html) for more information about this feature.
     * 
     */
    public Optional<Output<List<DistributionTrustedKeyGroupArgs>>> trustedKeyGroups() {
        return Optional.ofNullable(this.trustedKeyGroups);
    }

    /**
     * List of AWS account IDs (or `self`) that you want to allow to create signed URLs for private content. See the [CloudFront User Guide](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-trusted-signers.html) for more information about this feature.
     * 
     */
    @Import(name="trustedSigners")
    private @Nullable Output<List<DistributionTrustedSignerArgs>> trustedSigners;

    /**
     * @return List of AWS account IDs (or `self`) that you want to allow to create signed URLs for private content. See the [CloudFront User Guide](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-trusted-signers.html) for more information about this feature.
     * 
     */
    public Optional<Output<List<DistributionTrustedSignerArgs>>> trustedSigners() {
        return Optional.ofNullable(this.trustedSigners);
    }

    /**
     * The SSL configuration for this distribution (maximum one).
     * 
     */
    @Import(name="viewerCertificate")
    private @Nullable Output<DistributionViewerCertificateArgs> viewerCertificate;

    /**
     * @return The SSL configuration for this distribution (maximum one).
     * 
     */
    public Optional<Output<DistributionViewerCertificateArgs>> viewerCertificate() {
        return Optional.ofNullable(this.viewerCertificate);
    }

    /**
     * If enabled, the resource will wait for the distribution status to change from `InProgress` to `Deployed`. Setting this to`false` will skip the process. Default: `true`.
     * 
     */
    @Import(name="waitForDeployment")
    private @Nullable Output<Boolean> waitForDeployment;

    /**
     * @return If enabled, the resource will wait for the distribution status to change from `InProgress` to `Deployed`. Setting this to`false` will skip the process. Default: `true`.
     * 
     */
    public Optional<Output<Boolean>> waitForDeployment() {
        return Optional.ofNullable(this.waitForDeployment);
    }

    /**
     * Unique identifier that specifies the AWS WAF web ACL, if any, to associate with this distribution. To specify a web ACL created using the latest version of AWS WAF (WAFv2), use the ACL ARN, for example `aws_wafv2_web_acl.example.arn`. To specify a web ACL created using AWS WAF Classic, use the ACL ID, for example `aws_waf_web_acl.example.id`. The WAF Web ACL must exist in the WAF Global (CloudFront) region and the credentials configuring this argument must have `waf:GetWebACL` permissions assigned.
     * 
     */
    @Import(name="webAclId")
    private @Nullable Output<String> webAclId;

    /**
     * @return Unique identifier that specifies the AWS WAF web ACL, if any, to associate with this distribution. To specify a web ACL created using the latest version of AWS WAF (WAFv2), use the ACL ARN, for example `aws_wafv2_web_acl.example.arn`. To specify a web ACL created using AWS WAF Classic, use the ACL ID, for example `aws_waf_web_acl.example.id`. The WAF Web ACL must exist in the WAF Global (CloudFront) region and the credentials configuring this argument must have `waf:GetWebACL` permissions assigned.
     * 
     */
    public Optional<Output<String>> webAclId() {
        return Optional.ofNullable(this.webAclId);
    }

    private DistributionState() {}

    private DistributionState(DistributionState $) {
        this.aliases = $.aliases;
        this.arn = $.arn;
        this.callerReference = $.callerReference;
        this.comment = $.comment;
        this.customErrorResponses = $.customErrorResponses;
        this.defaultCacheBehavior = $.defaultCacheBehavior;
        this.defaultRootObject = $.defaultRootObject;
        this.domainName = $.domainName;
        this.enabled = $.enabled;
        this.etag = $.etag;
        this.hostedZoneId = $.hostedZoneId;
        this.httpVersion = $.httpVersion;
        this.inProgressValidationBatches = $.inProgressValidationBatches;
        this.isIpv6Enabled = $.isIpv6Enabled;
        this.lastModifiedTime = $.lastModifiedTime;
        this.loggingConfig = $.loggingConfig;
        this.orderedCacheBehaviors = $.orderedCacheBehaviors;
        this.originGroups = $.originGroups;
        this.origins = $.origins;
        this.priceClass = $.priceClass;
        this.restrictions = $.restrictions;
        this.retainOnDelete = $.retainOnDelete;
        this.status = $.status;
        this.tags = $.tags;
        this.tagsAll = $.tagsAll;
        this.trustedKeyGroups = $.trustedKeyGroups;
        this.trustedSigners = $.trustedSigners;
        this.viewerCertificate = $.viewerCertificate;
        this.waitForDeployment = $.waitForDeployment;
        this.webAclId = $.webAclId;
    }

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

    public static final class Builder {
        private DistributionState $;

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

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

        /**
         * @param aliases Extra CNAMEs (alternate domain names), if any, for this distribution.
         * 
         * @return builder
         * 
         */
        public Builder aliases(@Nullable Output<List<String>> aliases) {
            $.aliases = aliases;
            return this;
        }

        /**
         * @param aliases Extra CNAMEs (alternate domain names), if any, for this distribution.
         * 
         * @return builder
         * 
         */
        public Builder aliases(List<String> aliases) {
            return aliases(Output.of(aliases));
        }

        /**
         * @param aliases Extra CNAMEs (alternate domain names), if any, for this distribution.
         * 
         * @return builder
         * 
         */
        public Builder aliases(String... aliases) {
            return aliases(List.of(aliases));
        }

        /**
         * @param arn ARN for the distribution. For example: `arn:aws:cloudfront::123456789012:distribution/EDFDVBD632BHDS5`, where `123456789012` is your AWS account ID.
         * 
         * @return builder
         * 
         */
        public Builder arn(@Nullable Output<String> arn) {
            $.arn = arn;
            return this;
        }

        /**
         * @param arn ARN for the distribution. For example: `arn:aws:cloudfront::123456789012:distribution/EDFDVBD632BHDS5`, where `123456789012` is your AWS account ID.
         * 
         * @return builder
         * 
         */
        public Builder arn(String arn) {
            return arn(Output.of(arn));
        }

        /**
         * @param callerReference Internal value used by CloudFront to allow future updates to the distribution configuration.
         * 
         * @return builder
         * 
         */
        public Builder callerReference(@Nullable Output<String> callerReference) {
            $.callerReference = callerReference;
            return this;
        }

        /**
         * @param callerReference Internal value used by CloudFront to allow future updates to the distribution configuration.
         * 
         * @return builder
         * 
         */
        public Builder callerReference(String callerReference) {
            return callerReference(Output.of(callerReference));
        }

        /**
         * @param comment Any comments you want to include about the distribution.
         * 
         * @return builder
         * 
         */
        public Builder comment(@Nullable Output<String> comment) {
            $.comment = comment;
            return this;
        }

        /**
         * @param comment Any comments you want to include about the distribution.
         * 
         * @return builder
         * 
         */
        public Builder comment(String comment) {
            return comment(Output.of(comment));
        }

        /**
         * @param customErrorResponses One or more custom error response elements (multiples allowed).
         * 
         * @return builder
         * 
         */
        public Builder customErrorResponses(@Nullable Output<List<DistributionCustomErrorResponseArgs>> customErrorResponses) {
            $.customErrorResponses = customErrorResponses;
            return this;
        }

        /**
         * @param customErrorResponses One or more custom error response elements (multiples allowed).
         * 
         * @return builder
         * 
         */
        public Builder customErrorResponses(List<DistributionCustomErrorResponseArgs> customErrorResponses) {
            return customErrorResponses(Output.of(customErrorResponses));
        }

        /**
         * @param customErrorResponses One or more custom error response elements (multiples allowed).
         * 
         * @return builder
         * 
         */
        public Builder customErrorResponses(DistributionCustomErrorResponseArgs... customErrorResponses) {
            return customErrorResponses(List.of(customErrorResponses));
        }

        /**
         * @param defaultCacheBehavior Default cache behavior for this distribution (maximum one). Requires either `cache_policy_id` (preferred) or `forwarded_values` (deprecated) be set.
         * 
         * @return builder
         * 
         */
        public Builder defaultCacheBehavior(@Nullable Output<DistributionDefaultCacheBehaviorArgs> defaultCacheBehavior) {
            $.defaultCacheBehavior = defaultCacheBehavior;
            return this;
        }

        /**
         * @param defaultCacheBehavior Default cache behavior for this distribution (maximum one). Requires either `cache_policy_id` (preferred) or `forwarded_values` (deprecated) be set.
         * 
         * @return builder
         * 
         */
        public Builder defaultCacheBehavior(DistributionDefaultCacheBehaviorArgs defaultCacheBehavior) {
            return defaultCacheBehavior(Output.of(defaultCacheBehavior));
        }

        /**
         * @param defaultRootObject Object that you want CloudFront to return (for example, index.html) when an end user requests the root URL.
         * 
         * @return builder
         * 
         */
        public Builder defaultRootObject(@Nullable Output<String> defaultRootObject) {
            $.defaultRootObject = defaultRootObject;
            return this;
        }

        /**
         * @param defaultRootObject Object that you want CloudFront to return (for example, index.html) when an end user requests the root URL.
         * 
         * @return builder
         * 
         */
        public Builder defaultRootObject(String defaultRootObject) {
            return defaultRootObject(Output.of(defaultRootObject));
        }

        /**
         * @param domainName DNS domain name of either the S3 bucket, or web site of your custom origin.
         * 
         * @return builder
         * 
         */
        public Builder domainName(@Nullable Output<String> domainName) {
            $.domainName = domainName;
            return this;
        }

        /**
         * @param domainName DNS domain name of either the S3 bucket, or web site of your custom origin.
         * 
         * @return builder
         * 
         */
        public Builder domainName(String domainName) {
            return domainName(Output.of(domainName));
        }

        /**
         * @param enabled Whether the distribution is enabled to accept end user requests for content.
         * 
         * @return builder
         * 
         */
        public Builder enabled(@Nullable Output<Boolean> enabled) {
            $.enabled = enabled;
            return this;
        }

        /**
         * @param enabled Whether the distribution is enabled to accept end user requests for content.
         * 
         * @return builder
         * 
         */
        public Builder enabled(Boolean enabled) {
            return enabled(Output.of(enabled));
        }

        /**
         * @param etag Current version of the distribution&#39;s information. For example: `E2QWRUHAPOMQZL`.
         * 
         * @return builder
         * 
         */
        public Builder etag(@Nullable Output<String> etag) {
            $.etag = etag;
            return this;
        }

        /**
         * @param etag Current version of the distribution&#39;s information. For example: `E2QWRUHAPOMQZL`.
         * 
         * @return builder
         * 
         */
        public Builder etag(String etag) {
            return etag(Output.of(etag));
        }

        /**
         * @param hostedZoneId CloudFront Route 53 zone ID that can be used to route an [Alias Resource Record Set](http://docs.aws.amazon.com/Route53/latest/APIReference/CreateAliasRRSAPI.html) to. This attribute is simply an alias for the zone ID `Z2FDTNDATAQYW2`.
         * 
         * @return builder
         * 
         */
        public Builder hostedZoneId(@Nullable Output<String> hostedZoneId) {
            $.hostedZoneId = hostedZoneId;
            return this;
        }

        /**
         * @param hostedZoneId CloudFront Route 53 zone ID that can be used to route an [Alias Resource Record Set](http://docs.aws.amazon.com/Route53/latest/APIReference/CreateAliasRRSAPI.html) to. This attribute is simply an alias for the zone ID `Z2FDTNDATAQYW2`.
         * 
         * @return builder
         * 
         */
        public Builder hostedZoneId(String hostedZoneId) {
            return hostedZoneId(Output.of(hostedZoneId));
        }

        /**
         * @param httpVersion Maximum HTTP version to support on the distribution. Allowed values are `http1.1`, `http2`, `http2and3` and `http3`. The default is `http2`.
         * 
         * @return builder
         * 
         */
        public Builder httpVersion(@Nullable Output<String> httpVersion) {
            $.httpVersion = httpVersion;
            return this;
        }

        /**
         * @param httpVersion Maximum HTTP version to support on the distribution. Allowed values are `http1.1`, `http2`, `http2and3` and `http3`. The default is `http2`.
         * 
         * @return builder
         * 
         */
        public Builder httpVersion(String httpVersion) {
            return httpVersion(Output.of(httpVersion));
        }

        /**
         * @param inProgressValidationBatches Number of invalidation batches currently in progress.
         * 
         * @return builder
         * 
         */
        public Builder inProgressValidationBatches(@Nullable Output<Integer> inProgressValidationBatches) {
            $.inProgressValidationBatches = inProgressValidationBatches;
            return this;
        }

        /**
         * @param inProgressValidationBatches Number of invalidation batches currently in progress.
         * 
         * @return builder
         * 
         */
        public Builder inProgressValidationBatches(Integer inProgressValidationBatches) {
            return inProgressValidationBatches(Output.of(inProgressValidationBatches));
        }

        /**
         * @param isIpv6Enabled Whether the IPv6 is enabled for the distribution.
         * 
         * @return builder
         * 
         */
        public Builder isIpv6Enabled(@Nullable Output<Boolean> isIpv6Enabled) {
            $.isIpv6Enabled = isIpv6Enabled;
            return this;
        }

        /**
         * @param isIpv6Enabled Whether the IPv6 is enabled for the distribution.
         * 
         * @return builder
         * 
         */
        public Builder isIpv6Enabled(Boolean isIpv6Enabled) {
            return isIpv6Enabled(Output.of(isIpv6Enabled));
        }

        /**
         * @param lastModifiedTime Date and time the distribution was last modified.
         * 
         * @return builder
         * 
         */
        public Builder lastModifiedTime(@Nullable Output<String> lastModifiedTime) {
            $.lastModifiedTime = lastModifiedTime;
            return this;
        }

        /**
         * @param lastModifiedTime Date and time the distribution was last modified.
         * 
         * @return builder
         * 
         */
        public Builder lastModifiedTime(String lastModifiedTime) {
            return lastModifiedTime(Output.of(lastModifiedTime));
        }

        /**
         * @param loggingConfig The logging configuration that controls how logs are written to your distribution (maximum one).
         * 
         * @return builder
         * 
         */
        public Builder loggingConfig(@Nullable Output<DistributionLoggingConfigArgs> loggingConfig) {
            $.loggingConfig = loggingConfig;
            return this;
        }

        /**
         * @param loggingConfig The logging configuration that controls how logs are written to your distribution (maximum one).
         * 
         * @return builder
         * 
         */
        public Builder loggingConfig(DistributionLoggingConfigArgs loggingConfig) {
            return loggingConfig(Output.of(loggingConfig));
        }

        /**
         * @param orderedCacheBehaviors Ordered list of cache behaviors resource for this distribution. List from top to bottom in order of precedence. The topmost cache behavior will have precedence 0.
         * 
         * @return builder
         * 
         */
        public Builder orderedCacheBehaviors(@Nullable Output<List<DistributionOrderedCacheBehaviorArgs>> orderedCacheBehaviors) {
            $.orderedCacheBehaviors = orderedCacheBehaviors;
            return this;
        }

        /**
         * @param orderedCacheBehaviors Ordered list of cache behaviors resource for this distribution. List from top to bottom in order of precedence. The topmost cache behavior will have precedence 0.
         * 
         * @return builder
         * 
         */
        public Builder orderedCacheBehaviors(List<DistributionOrderedCacheBehaviorArgs> orderedCacheBehaviors) {
            return orderedCacheBehaviors(Output.of(orderedCacheBehaviors));
        }

        /**
         * @param orderedCacheBehaviors Ordered list of cache behaviors resource for this distribution. List from top to bottom in order of precedence. The topmost cache behavior will have precedence 0.
         * 
         * @return builder
         * 
         */
        public Builder orderedCacheBehaviors(DistributionOrderedCacheBehaviorArgs... orderedCacheBehaviors) {
            return orderedCacheBehaviors(List.of(orderedCacheBehaviors));
        }

        /**
         * @param originGroups One or more origin_group for this distribution (multiples allowed).
         * 
         * @return builder
         * 
         */
        public Builder originGroups(@Nullable Output<List<DistributionOriginGroupArgs>> originGroups) {
            $.originGroups = originGroups;
            return this;
        }

        /**
         * @param originGroups One or more origin_group for this distribution (multiples allowed).
         * 
         * @return builder
         * 
         */
        public Builder originGroups(List<DistributionOriginGroupArgs> originGroups) {
            return originGroups(Output.of(originGroups));
        }

        /**
         * @param originGroups One or more origin_group for this distribution (multiples allowed).
         * 
         * @return builder
         * 
         */
        public Builder originGroups(DistributionOriginGroupArgs... originGroups) {
            return originGroups(List.of(originGroups));
        }

        /**
         * @param origins One or more origins for this distribution (multiples allowed).
         * 
         * @return builder
         * 
         */
        public Builder origins(@Nullable Output<List<DistributionOriginArgs>> origins) {
            $.origins = origins;
            return this;
        }

        /**
         * @param origins One or more origins for this distribution (multiples allowed).
         * 
         * @return builder
         * 
         */
        public Builder origins(List<DistributionOriginArgs> origins) {
            return origins(Output.of(origins));
        }

        /**
         * @param origins One or more origins for this distribution (multiples allowed).
         * 
         * @return builder
         * 
         */
        public Builder origins(DistributionOriginArgs... origins) {
            return origins(List.of(origins));
        }

        /**
         * @param priceClass Price class for this distribution. One of `PriceClass_All`, `PriceClass_200`, `PriceClass_100`.
         * 
         * @return builder
         * 
         */
        public Builder priceClass(@Nullable Output<String> priceClass) {
            $.priceClass = priceClass;
            return this;
        }

        /**
         * @param priceClass Price class for this distribution. One of `PriceClass_All`, `PriceClass_200`, `PriceClass_100`.
         * 
         * @return builder
         * 
         */
        public Builder priceClass(String priceClass) {
            return priceClass(Output.of(priceClass));
        }

        /**
         * @param restrictions The restriction configuration for this distribution (maximum one).
         * 
         * @return builder
         * 
         */
        public Builder restrictions(@Nullable Output<DistributionRestrictionsArgs> restrictions) {
            $.restrictions = restrictions;
            return this;
        }

        /**
         * @param restrictions The restriction configuration for this distribution (maximum one).
         * 
         * @return builder
         * 
         */
        public Builder restrictions(DistributionRestrictionsArgs restrictions) {
            return restrictions(Output.of(restrictions));
        }

        /**
         * @param retainOnDelete Disables the distribution instead of deleting it when destroying the resource through the provider. If this is set, the distribution needs to be deleted manually afterwards. Default: `false`.
         * 
         * @return builder
         * 
         */
        public Builder retainOnDelete(@Nullable Output<Boolean> retainOnDelete) {
            $.retainOnDelete = retainOnDelete;
            return this;
        }

        /**
         * @param retainOnDelete Disables the distribution instead of deleting it when destroying the resource through the provider. If this is set, the distribution needs to be deleted manually afterwards. Default: `false`.
         * 
         * @return builder
         * 
         */
        public Builder retainOnDelete(Boolean retainOnDelete) {
            return retainOnDelete(Output.of(retainOnDelete));
        }

        /**
         * @param status Current status of the distribution. `Deployed` if the distribution&#39;s information is fully propagated throughout the Amazon CloudFront system.
         * 
         * @return builder
         * 
         */
        public Builder status(@Nullable Output<String> status) {
            $.status = status;
            return this;
        }

        /**
         * @param status Current status of the distribution. `Deployed` if the distribution&#39;s information is fully propagated throughout the Amazon CloudFront system.
         * 
         * @return builder
         * 
         */
        public Builder status(String status) {
            return status(Output.of(status));
        }

        /**
         * @param tags A map of tags to assign to the resource. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
         * 
         * @return builder
         * 
         */
        public Builder tags(@Nullable Output<Map<String,String>> tags) {
            $.tags = tags;
            return this;
        }

        /**
         * @param tags A map of tags to assign to the resource. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
         * 
         * @return builder
         * 
         */
        public Builder tags(Map<String,String> tags) {
            return tags(Output.of(tags));
        }

        /**
         * @param tagsAll Map of tags assigned to the resource, including those inherited from the provider `default_tags` configuration block.
         * 
         * @return builder
         * 
         */
        public Builder tagsAll(@Nullable Output<Map<String,String>> tagsAll) {
            $.tagsAll = tagsAll;
            return this;
        }

        /**
         * @param tagsAll Map of tags assigned to the resource, including those inherited from the provider `default_tags` configuration block.
         * 
         * @return builder
         * 
         */
        public Builder tagsAll(Map<String,String> tagsAll) {
            return tagsAll(Output.of(tagsAll));
        }

        /**
         * @param trustedKeyGroups List of key group IDs that CloudFront can use to validate signed URLs or signed cookies. See the [CloudFront User Guide](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-trusted-signers.html) for more information about this feature.
         * 
         * @return builder
         * 
         */
        public Builder trustedKeyGroups(@Nullable Output<List<DistributionTrustedKeyGroupArgs>> trustedKeyGroups) {
            $.trustedKeyGroups = trustedKeyGroups;
            return this;
        }

        /**
         * @param trustedKeyGroups List of key group IDs that CloudFront can use to validate signed URLs or signed cookies. See the [CloudFront User Guide](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-trusted-signers.html) for more information about this feature.
         * 
         * @return builder
         * 
         */
        public Builder trustedKeyGroups(List<DistributionTrustedKeyGroupArgs> trustedKeyGroups) {
            return trustedKeyGroups(Output.of(trustedKeyGroups));
        }

        /**
         * @param trustedKeyGroups List of key group IDs that CloudFront can use to validate signed URLs or signed cookies. See the [CloudFront User Guide](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-trusted-signers.html) for more information about this feature.
         * 
         * @return builder
         * 
         */
        public Builder trustedKeyGroups(DistributionTrustedKeyGroupArgs... trustedKeyGroups) {
            return trustedKeyGroups(List.of(trustedKeyGroups));
        }

        /**
         * @param trustedSigners List of AWS account IDs (or `self`) that you want to allow to create signed URLs for private content. See the [CloudFront User Guide](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-trusted-signers.html) for more information about this feature.
         * 
         * @return builder
         * 
         */
        public Builder trustedSigners(@Nullable Output<List<DistributionTrustedSignerArgs>> trustedSigners) {
            $.trustedSigners = trustedSigners;
            return this;
        }

        /**
         * @param trustedSigners List of AWS account IDs (or `self`) that you want to allow to create signed URLs for private content. See the [CloudFront User Guide](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-trusted-signers.html) for more information about this feature.
         * 
         * @return builder
         * 
         */
        public Builder trustedSigners(List<DistributionTrustedSignerArgs> trustedSigners) {
            return trustedSigners(Output.of(trustedSigners));
        }

        /**
         * @param trustedSigners List of AWS account IDs (or `self`) that you want to allow to create signed URLs for private content. See the [CloudFront User Guide](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-trusted-signers.html) for more information about this feature.
         * 
         * @return builder
         * 
         */
        public Builder trustedSigners(DistributionTrustedSignerArgs... trustedSigners) {
            return trustedSigners(List.of(trustedSigners));
        }

        /**
         * @param viewerCertificate The SSL configuration for this distribution (maximum one).
         * 
         * @return builder
         * 
         */
        public Builder viewerCertificate(@Nullable Output<DistributionViewerCertificateArgs> viewerCertificate) {
            $.viewerCertificate = viewerCertificate;
            return this;
        }

        /**
         * @param viewerCertificate The SSL configuration for this distribution (maximum one).
         * 
         * @return builder
         * 
         */
        public Builder viewerCertificate(DistributionViewerCertificateArgs viewerCertificate) {
            return viewerCertificate(Output.of(viewerCertificate));
        }

        /**
         * @param waitForDeployment If enabled, the resource will wait for the distribution status to change from `InProgress` to `Deployed`. Setting this to`false` will skip the process. Default: `true`.
         * 
         * @return builder
         * 
         */
        public Builder waitForDeployment(@Nullable Output<Boolean> waitForDeployment) {
            $.waitForDeployment = waitForDeployment;
            return this;
        }

        /**
         * @param waitForDeployment If enabled, the resource will wait for the distribution status to change from `InProgress` to `Deployed`. Setting this to`false` will skip the process. Default: `true`.
         * 
         * @return builder
         * 
         */
        public Builder waitForDeployment(Boolean waitForDeployment) {
            return waitForDeployment(Output.of(waitForDeployment));
        }

        /**
         * @param webAclId Unique identifier that specifies the AWS WAF web ACL, if any, to associate with this distribution. To specify a web ACL created using the latest version of AWS WAF (WAFv2), use the ACL ARN, for example `aws_wafv2_web_acl.example.arn`. To specify a web ACL created using AWS WAF Classic, use the ACL ID, for example `aws_waf_web_acl.example.id`. The WAF Web ACL must exist in the WAF Global (CloudFront) region and the credentials configuring this argument must have `waf:GetWebACL` permissions assigned.
         * 
         * @return builder
         * 
         */
        public Builder webAclId(@Nullable Output<String> webAclId) {
            $.webAclId = webAclId;
            return this;
        }

        /**
         * @param webAclId Unique identifier that specifies the AWS WAF web ACL, if any, to associate with this distribution. To specify a web ACL created using the latest version of AWS WAF (WAFv2), use the ACL ARN, for example `aws_wafv2_web_acl.example.arn`. To specify a web ACL created using AWS WAF Classic, use the ACL ID, for example `aws_waf_web_acl.example.id`. The WAF Web ACL must exist in the WAF Global (CloudFront) region and the credentials configuring this argument must have `waf:GetWebACL` permissions assigned.
         * 
         * @return builder
         * 
         */
        public Builder webAclId(String webAclId) {
            return webAclId(Output.of(webAclId));
        }

        public DistributionState build() {
            return $;
        }
    }

}
