<reponame>Dwonczykj/gember_deploy// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***

using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Threading.Tasks;
using Pulumi.Serialization;
using Pulumi;

namespace TencentCloudIAC.PulumiPackage.Tencentcloud.Cdn
{
    /// <summary>
    /// Provides a resource to create a CDN domain.
    /// 
    /// &gt; **NOTE:** To disable most of configuration with switch, just modify switch argument to off instead of remove the whole block
    /// 
    /// ## Example Usage
    /// 
    /// ```csharp
    /// using Pulumi;
    /// using Tencentcloud = TencentCloudIAC.PulumiPackage.Tencentcloud;
    /// 
    /// class MyStack : Stack
    /// {
    ///     public MyStack()
    ///     {
    ///         var foo = new Tencentcloud.Cdn.Domain("foo", new Tencentcloud.Cdn.DomainArgs
    ///         {
    ///             Area = "mainland",
    ///             Domain = "xxxx.com",
    ///             FullUrlCache = false,
    ///             HttpsConfig = new Tencentcloud.Cdn.Inputs.DomainHttpsConfigArgs
    ///             {
    ///                 ForceRedirect = new Tencentcloud.Cdn.Inputs.DomainHttpsConfigForceRedirectArgs
    ///                 {
    ///                     RedirectStatusCode = 302,
    ///                     RedirectType = "http",
    ///                     Switch = "on",
    ///                 },
    ///                 Http2Switch = "off",
    ///                 HttpsSwitch = "off",
    ///                 OcspStaplingSwitch = "off",
    ///                 SpdySwitch = "off",
    ///                 VerifyClient = "off",
    ///             },
    ///             Origin = new Tencentcloud.Cdn.Inputs.DomainOriginArgs
    ///             {
    ///                 OriginLists = 
    ///                 {
    ///                     "127.0.0.1",
    ///                 },
    ///                 OriginPullProtocol = "follow",
    ///                 OriginType = "ip",
    ///             },
    ///             ServiceType = "web",
    ///             Tags = 
    ///             {
    ///                 { "hello", "world" },
    ///             },
    ///         });
    ///     }
    /// 
    /// }
    /// ```
    /// 
    /// Example Usage of cdn uses cache and request headers
    /// 
    /// ```csharp
    /// using Pulumi;
    /// using Tencentcloud = TencentCloudIAC.PulumiPackage.Tencentcloud;
    /// 
    /// class MyStack : Stack
    /// {
    ///     public MyStack()
    ///     {
    ///         var foo = new Tencentcloud.Cdn.Domain("foo", new Tencentcloud.Cdn.DomainArgs
    ///         {
    ///             Area = "mainland",
    ///             CacheKey = new Tencentcloud.Cdn.Inputs.DomainCacheKeyArgs
    ///             {
    ///                 FullUrlCache = "on",
    ///             },
    ///             Domain = "xxxx.com",
    ///             HttpsConfig = new Tencentcloud.Cdn.Inputs.DomainHttpsConfigArgs
    ///             {
    ///                 ForceRedirect = new Tencentcloud.Cdn.Inputs.DomainHttpsConfigForceRedirectArgs
    ///                 {
    ///                     RedirectStatusCode = 302,
    ///                     RedirectType = "http",
    ///                     Switch = "on",
    ///                 },
    ///                 Http2Switch = "off",
    ///                 HttpsSwitch = "off",
    ///                 OcspStaplingSwitch = "off",
    ///                 SpdySwitch = "off",
    ///                 VerifyClient = "off",
    ///             },
    ///             Origin = new Tencentcloud.Cdn.Inputs.DomainOriginArgs
    ///             {
    ///                 OriginLists = 
    ///                 {
    ///                     "127.0.0.1",
    ///                 },
    ///                 OriginPullProtocol = "follow",
    ///                 OriginType = "ip",
    ///             },
    ///             RangeOriginSwitch = "off",
    ///             RequestHeader = new Tencentcloud.Cdn.Inputs.DomainRequestHeaderArgs
    ///             {
    ///                 HeaderRules = 
    ///                 {
    ///                     new Tencentcloud.Cdn.Inputs.DomainRequestHeaderHeaderRuleArgs
    ///                     {
    ///                         HeaderMode = "add",
    ///                         HeaderName = "tf-header-name",
    ///                         HeaderValue = "tf-header-value",
    ///                         RulePaths = 
    ///                         {
    ///                             "*",
    ///                         },
    ///                         RuleType = "all",
    ///                     },
    ///                 },
    ///                 Switch = "on",
    ///             },
    ///             RuleCaches = 
    ///             {
    ///                 new Tencentcloud.Cdn.Inputs.DomainRuleCachArgs
    ///                 {
    ///                     CacheTime = 10000,
    ///                     NoCacheSwitch = "on",
    ///                     ReValidate = "on",
    ///                 },
    ///             },
    ///             ServiceType = "web",
    ///             Tags = 
    ///             {
    ///                 { "hello", "world" },
    ///             },
    ///         });
    ///     }
    /// 
    /// }
    /// ```
    /// 
    /// Example Usage of COS bucket url as origin
    /// 
    /// ```csharp
    /// using Pulumi;
    /// using Tencentcloud = TencentCloudIAC.PulumiPackage.Tencentcloud;
    /// 
    /// class MyStack : Stack
    /// {
    ///     public MyStack()
    ///     {
    ///         var bucket = new Tencentcloud.Cos.Bucket("bucket", new Tencentcloud.Cos.BucketArgs
    ///         {
    ///             Bucket = "demo-bucket-1251234567",
    ///             Acl = "private",
    ///         });
    ///         // Create cdn domain
    ///         var cdn = new Tencentcloud.Cdn.Domain("cdn", new Tencentcloud.Cdn.DomainArgs
    ///         {
    ///             Domain = "abc.com",
    ///             ServiceType = "web",
    ///             Area = "mainland",
    ///             CacheKey = new Tencentcloud.Cdn.Inputs.DomainCacheKeyArgs
    ///             {
    ///                 FullUrlCache = "off",
    ///             },
    ///             Origin = new Tencentcloud.Cdn.Inputs.DomainOriginArgs
    ///             {
    ///                 OriginType = "cos",
    ///                 OriginLists = 
    ///                 {
    ///                     bucket.CosBucketUrl,
    ///                 },
    ///                 ServerName = bucket.CosBucketUrl,
    ///                 OriginPullProtocol = "follow",
    ///                 CosPrivateAccess = "on",
    ///             },
    ///             HttpsConfig = new Tencentcloud.Cdn.Inputs.DomainHttpsConfigArgs
    ///             {
    ///                 HttpsSwitch = "off",
    ///                 Http2Switch = "off",
    ///                 OcspStaplingSwitch = "off",
    ///                 SpdySwitch = "off",
    ///                 VerifyClient = "off",
    ///             },
    ///         });
    ///     }
    /// 
    /// }
    /// ```
    /// 
    /// ## Import
    /// 
    /// CDN domain can be imported using the id, e.g.
    /// 
    /// ```sh
    ///  $ pulumi import tencentcloud:Cdn/domain:Domain foo xxxx.com
    /// ```
    /// </summary>
    [TencentcloudResourceType("tencentcloud:Cdn/domain:Domain")]
    public partial class Domain : Pulumi.CustomResource
    {
        /// <summary>
        /// Domain name acceleration region. `mainland`: acceleration inside mainland China, `overseas`: acceleration outside mainland China, `global`: global acceleration. Overseas acceleration service must be enabled to use overseas acceleration and global acceleration.
        /// </summary>
        [Output("area")]
        public Output<string?> Area { get; private set; } = null!;

        /// <summary>
        /// Specify timestamp hotlink protection configuration, NOTE: only one type can choose for the sub elements.
        /// </summary>
        [Output("authentication")]
        public Output<Outputs.DomainAuthentication?> Authentication { get; private set; } = null!;

        /// <summary>
        /// Access authentication for S3 origin.
        /// </summary>
        [Output("awsPrivateAccess")]
        public Output<Outputs.DomainAwsPrivateAccess?> AwsPrivateAccess { get; private set; } = null!;

        /// <summary>
        /// Bandwidth cap configuration.
        /// </summary>
        [Output("bandWidthAlert")]
        public Output<Outputs.DomainBandWidthAlert?> BandWidthAlert { get; private set; } = null!;

        /// <summary>
        /// Cache key configuration (Ignore Query String configuration). NOTE: All of `full_url_cache` default value is `on`.
        /// </summary>
        [Output("cacheKey")]
        public Output<Outputs.DomainCacheKey?> CacheKey { get; private set; } = null!;

        /// <summary>
        /// CNAME address of domain name.
        /// </summary>
        [Output("cname")]
        public Output<string> Cname { get; private set; } = null!;

        /// <summary>
        /// Smart compression configurations.
        /// </summary>
        [Output("compression")]
        public Output<Outputs.DomainCompression?> Compression { get; private set; } = null!;

        /// <summary>
        /// Creation time of domain name.
        /// </summary>
        [Output("createTime")]
        public Output<string> CreateTime { get; private set; } = null!;

        /// <summary>
        /// Name of the acceleration domain.
        /// </summary>
        [Output("domain")]
        public Output<string> CdnDomain { get; private set; } = null!;

        /// <summary>
        /// Downstream capping configuration.
        /// </summary>
        [Output("downstreamCapping")]
        public Output<Outputs.DomainDownstreamCapping?> DownstreamCapping { get; private set; } = null!;

        /// <summary>
        /// Used for store `dry_run` request json.
        /// </summary>
        [Output("dryRunCreateResult")]
        public Output<string> DryRunCreateResult { get; private set; } = null!;

        /// <summary>
        /// Used for store `dry_run` update request json.
        /// </summary>
        [Output("dryRunUpdateResult")]
        public Output<string> DryRunUpdateResult { get; private set; } = null!;

        /// <summary>
        /// Error page configurations.
        /// </summary>
        [Output("errorPage")]
        public Output<Outputs.DomainErrorPage?> ErrorPage { get; private set; } = null!;

        /// <summary>
        /// Used for validate only by store arguments to request json string as expected, WARNING: if set to `true`, NO Cloud Api will be invoked but store as local data, do not use this argument unless you really know what you are doing.
        /// </summary>
        [Output("explicitUsingDryRun")]
        public Output<bool?> ExplicitUsingDryRun { get; private set; } = null!;

        /// <summary>
        /// 301/302 redirect following switch, available values: `on`, `off` (default).
        /// </summary>
        [Output("followRedirectSwitch")]
        public Output<string?> FollowRedirectSwitch { get; private set; } = null!;

        /// <summary>
        /// Use `cache_key` &gt; `full_url_cache` instead. Whether to enable full-path cache. Default value is `true`.
        /// </summary>
        [Output("fullUrlCache")]
        public Output<bool?> FullUrlCache { get; private set; } = null!;

        /// <summary>
        /// HTTPS acceleration configuration. It's a list and consist of at most one item.
        /// </summary>
        [Output("httpsConfig")]
        public Output<Outputs.DomainHttpsConfig> HttpsConfig { get; private set; } = null!;

        /// <summary>
        /// Access authentication for OBS origin.
        /// </summary>
        [Output("hwPrivateAccess")]
        public Output<Outputs.DomainHwPrivateAccess?> HwPrivateAccess { get; private set; } = null!;

        /// <summary>
        /// Specify Ip filter configurations.
        /// </summary>
        [Output("ipFilter")]
        public Output<Outputs.DomainIpFilter?> IpFilter { get; private set; } = null!;

        /// <summary>
        /// Specify Ip frequency limit configurations.
        /// </summary>
        [Output("ipFreqLimit")]
        public Output<Outputs.DomainIpFreqLimit?> IpFreqLimit { get; private set; } = null!;

        /// <summary>
        /// ipv6 access configuration switch. Only available when area set to `mainland`. Valid values are `on` and `off`. Default value is `off`.
        /// </summary>
        [Output("ipv6AccessSwitch")]
        public Output<string?> Ipv6AccessSwitch { get; private set; } = null!;

        /// <summary>
        /// Browser cache configuration. (This feature is in beta and not generally available yet).
        /// </summary>
        [Output("maxAge")]
        public Output<Outputs.DomainMaxAge?> MaxAge { get; private set; } = null!;

        /// <summary>
        /// Offline cache switch, available values: `on`, `off` (default).
        /// </summary>
        [Output("offlineCacheSwitch")]
        public Output<string?> OfflineCacheSwitch { get; private set; } = null!;

        /// <summary>
        /// Origin server configuration. It's a list and consist of at most one item.
        /// </summary>
        [Output("origin")]
        public Output<Outputs.DomainOrigin> Origin { get; private set; } = null!;

        /// <summary>
        /// Cross-border linkage optimization configuration. (This feature is in beta and not generally available yet).
        /// </summary>
        [Output("originPullOptimization")]
        public Output<Outputs.DomainOriginPullOptimization?> OriginPullOptimization { get; private set; } = null!;

        /// <summary>
        /// Cross-border linkage optimization configuration.
        /// </summary>
        [Output("originPullTimeout")]
        public Output<Outputs.DomainOriginPullTimeout?> OriginPullTimeout { get; private set; } = null!;

        /// <summary>
        /// Access authentication for OSS origin.
        /// </summary>
        [Output("ossPrivateAccess")]
        public Output<Outputs.DomainOssPrivateAccess?> OssPrivateAccess { get; private set; } = null!;

        /// <summary>
        /// Maximum post size configuration.
        /// </summary>
        [Output("postMaxSizes")]
        public Output<ImmutableArray<Outputs.DomainPostMaxSize>> PostMaxSizes { get; private set; } = null!;

        /// <summary>
        /// The project CDN belongs to, default to 0.
        /// </summary>
        [Output("projectId")]
        public Output<int?> ProjectId { get; private set; } = null!;

        /// <summary>
        /// Access authentication for OBS origin.
        /// </summary>
        [Output("qnPrivateAccess")]
        public Output<Outputs.DomainQnPrivateAccess?> QnPrivateAccess { get; private set; } = null!;

        /// <summary>
        /// QUIC switch, available values: `on`, `off` (default).
        /// </summary>
        [Output("quicSwitch")]
        public Output<string?> QuicSwitch { get; private set; } = null!;

        /// <summary>
        /// Sharding back to source configuration switch. Valid values are `on` and `off`. Default value is `on`.
        /// </summary>
        [Output("rangeOriginSwitch")]
        public Output<string?> RangeOriginSwitch { get; private set; } = null!;

        /// <summary>
        /// Referer configuration.
        /// </summary>
        [Output("referer")]
        public Output<Outputs.DomainReferer?> Referer { get; private set; } = null!;

        /// <summary>
        /// Request header configuration. It's a list and consist of at most one item.
        /// </summary>
        [Output("requestHeader")]
        public Output<Outputs.DomainRequestHeader> RequestHeader { get; private set; } = null!;

        /// <summary>
        /// Response header configurations.
        /// </summary>
        [Output("responseHeader")]
        public Output<Outputs.DomainResponseHeader?> ResponseHeader { get; private set; } = null!;

        /// <summary>
        /// Response header cache switch, available values: `on`, `off` (default).
        /// </summary>
        [Output("responseHeaderCacheSwitch")]
        public Output<string?> ResponseHeaderCacheSwitch { get; private set; } = null!;

        /// <summary>
        /// Advanced path cache configuration.
        /// </summary>
        [Output("ruleCaches")]
        public Output<ImmutableArray<Outputs.DomainRuleCach>> RuleCaches { get; private set; } = null!;

        /// <summary>
        /// SEO switch, available values: `on`, `off` (default).
        /// </summary>
        [Output("seoSwitch")]
        public Output<string?> SeoSwitch { get; private set; } = null!;

        /// <summary>
        /// Acceleration domain name service type. `web`: static acceleration, `download`: download acceleration, `media`: streaming media VOD acceleration, `hybrid`: hybrid acceleration, `dynamic`: dynamic acceleration.
        /// </summary>
        [Output("serviceType")]
        public Output<string> ServiceType { get; private set; } = null!;

        /// <summary>
        /// Specific configuration for mainland, NOTE: Both specifying full schema or using it is superfluous, please use cloud api parameters json passthroughs, check the [Data Types](https://www.tencentcloud.com/document/api/228/31739#MainlandConfig) for more details.
        /// </summary>
        [Output("specificConfigMainland")]
        public Output<string?> SpecificConfigMainland { get; private set; } = null!;

        /// <summary>
        /// Specific configuration for oversea, NOTE: Both specifying full schema or using it is superfluous, please use cloud api parameters json passthroughs, check the [Data Types](https://www.tencentcloud.com/document/api/228/31739#OverseaConfig) for more details.
        /// </summary>
        [Output("specificConfigOverseas")]
        public Output<string?> SpecificConfigOverseas { get; private set; } = null!;

        /// <summary>
        /// Acceleration service status.
        /// </summary>
        [Output("status")]
        public Output<string> Status { get; private set; } = null!;

        /// <summary>
        /// Status code cache configurations.
        /// </summary>
        [Output("statusCodeCache")]
        public Output<Outputs.DomainStatusCodeCache?> StatusCodeCache { get; private set; } = null!;

        /// <summary>
        /// Tags of cdn domain.
        /// </summary>
        [Output("tags")]
        public Output<ImmutableDictionary<string, object>?> Tags { get; private set; } = null!;

        /// <summary>
        /// Video seek switch, available values: `on`, `off` (default).
        /// </summary>
        [Output("videoSeekSwitch")]
        public Output<string?> VideoSeekSwitch { get; private set; } = null!;


        /// <summary>
        /// Create a Domain resource with the given unique name, arguments, and options.
        /// </summary>
        ///
        /// <param name="name">The unique name of the resource</param>
        /// <param name="args">The arguments used to populate this resource's properties</param>
        /// <param name="options">A bag of options that control this resource's behavior</param>
        public Domain(string name, DomainArgs args, CustomResourceOptions? options = null)
            : base("tencentcloud:Cdn/domain:Domain", name, args ?? new DomainArgs(), MakeResourceOptions(options, ""))
        {
        }

        private Domain(string name, Input<string> id, DomainState? state = null, CustomResourceOptions? options = null)
            : base("tencentcloud:Cdn/domain:Domain", name, state, MakeResourceOptions(options, id))
        {
        }

        private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input<string>? id)
        {
            var defaultOptions = new CustomResourceOptions
            {
                Version = Utilities.Version,
                PluginDownloadURL = "github://api.github.com/tencentcloudstack",
            };
            var merged = CustomResourceOptions.Merge(defaultOptions, options);
            // Override the ID if one was specified for consistency with other language SDKs.
            merged.Id = id ?? merged.Id;
            return merged;
        }
        /// <summary>
        /// Get an existing Domain resource's state with the given name, ID, and optional extra
        /// properties used to qualify the lookup.
        /// </summary>
        ///
        /// <param name="name">The unique name of the resulting resource.</param>
        /// <param name="id">The unique provider ID of the resource to lookup.</param>
        /// <param name="state">Any extra arguments used during the lookup.</param>
        /// <param name="options">A bag of options that control this resource's behavior</param>
        public static Domain Get(string name, Input<string> id, DomainState? state = null, CustomResourceOptions? options = null)
        {
            return new Domain(name, id, state, options);
        }
    }

    public sealed class DomainArgs : Pulumi.ResourceArgs
    {
        /// <summary>
        /// Domain name acceleration region. `mainland`: acceleration inside mainland China, `overseas`: acceleration outside mainland China, `global`: global acceleration. Overseas acceleration service must be enabled to use overseas acceleration and global acceleration.
        /// </summary>
        [Input("area")]
        public Input<string>? Area { get; set; }

        /// <summary>
        /// Specify timestamp hotlink protection configuration, NOTE: only one type can choose for the sub elements.
        /// </summary>
        [Input("authentication")]
        public Input<Inputs.DomainAuthenticationArgs>? Authentication { get; set; }

        /// <summary>
        /// Access authentication for S3 origin.
        /// </summary>
        [Input("awsPrivateAccess")]
        public Input<Inputs.DomainAwsPrivateAccessArgs>? AwsPrivateAccess { get; set; }

        /// <summary>
        /// Bandwidth cap configuration.
        /// </summary>
        [Input("bandWidthAlert")]
        public Input<Inputs.DomainBandWidthAlertArgs>? BandWidthAlert { get; set; }

        /// <summary>
        /// Cache key configuration (Ignore Query String configuration). NOTE: All of `full_url_cache` default value is `on`.
        /// </summary>
        [Input("cacheKey")]
        public Input<Inputs.DomainCacheKeyArgs>? CacheKey { get; set; }

        /// <summary>
        /// Smart compression configurations.
        /// </summary>
        [Input("compression")]
        public Input<Inputs.DomainCompressionArgs>? Compression { get; set; }

        /// <summary>
        /// Name of the acceleration domain.
        /// </summary>
        [Input("domain", required: true)]
        public Input<string> CdnDomain { get; set; } = null!;

        /// <summary>
        /// Downstream capping configuration.
        /// </summary>
        [Input("downstreamCapping")]
        public Input<Inputs.DomainDownstreamCappingArgs>? DownstreamCapping { get; set; }

        /// <summary>
        /// Error page configurations.
        /// </summary>
        [Input("errorPage")]
        public Input<Inputs.DomainErrorPageArgs>? ErrorPage { get; set; }

        /// <summary>
        /// Used for validate only by store arguments to request json string as expected, WARNING: if set to `true`, NO Cloud Api will be invoked but store as local data, do not use this argument unless you really know what you are doing.
        /// </summary>
        [Input("explicitUsingDryRun")]
        public Input<bool>? ExplicitUsingDryRun { get; set; }

        /// <summary>
        /// 301/302 redirect following switch, available values: `on`, `off` (default).
        /// </summary>
        [Input("followRedirectSwitch")]
        public Input<string>? FollowRedirectSwitch { get; set; }

        /// <summary>
        /// Use `cache_key` &gt; `full_url_cache` instead. Whether to enable full-path cache. Default value is `true`.
        /// </summary>
        [Input("fullUrlCache")]
        public Input<bool>? FullUrlCache { get; set; }

        /// <summary>
        /// HTTPS acceleration configuration. It's a list and consist of at most one item.
        /// </summary>
        [Input("httpsConfig")]
        public Input<Inputs.DomainHttpsConfigArgs>? HttpsConfig { get; set; }

        /// <summary>
        /// Access authentication for OBS origin.
        /// </summary>
        [Input("hwPrivateAccess")]
        public Input<Inputs.DomainHwPrivateAccessArgs>? HwPrivateAccess { get; set; }

        /// <summary>
        /// Specify Ip filter configurations.
        /// </summary>
        [Input("ipFilter")]
        public Input<Inputs.DomainIpFilterArgs>? IpFilter { get; set; }

        /// <summary>
        /// Specify Ip frequency limit configurations.
        /// </summary>
        [Input("ipFreqLimit")]
        public Input<Inputs.DomainIpFreqLimitArgs>? IpFreqLimit { get; set; }

        /// <summary>
        /// ipv6 access configuration switch. Only available when area set to `mainland`. Valid values are `on` and `off`. Default value is `off`.
        /// </summary>
        [Input("ipv6AccessSwitch")]
        public Input<string>? Ipv6AccessSwitch { get; set; }

        /// <summary>
        /// Browser cache configuration. (This feature is in beta and not generally available yet).
        /// </summary>
        [Input("maxAge")]
        public Input<Inputs.DomainMaxAgeArgs>? MaxAge { get; set; }

        /// <summary>
        /// Offline cache switch, available values: `on`, `off` (default).
        /// </summary>
        [Input("offlineCacheSwitch")]
        public Input<string>? OfflineCacheSwitch { get; set; }

        /// <summary>
        /// Origin server configuration. It's a list and consist of at most one item.
        /// </summary>
        [Input("origin", required: true)]
        public Input<Inputs.DomainOriginArgs> Origin { get; set; } = null!;

        /// <summary>
        /// Cross-border linkage optimization configuration. (This feature is in beta and not generally available yet).
        /// </summary>
        [Input("originPullOptimization")]
        public Input<Inputs.DomainOriginPullOptimizationArgs>? OriginPullOptimization { get; set; }

        /// <summary>
        /// Cross-border linkage optimization configuration.
        /// </summary>
        [Input("originPullTimeout")]
        public Input<Inputs.DomainOriginPullTimeoutArgs>? OriginPullTimeout { get; set; }

        /// <summary>
        /// Access authentication for OSS origin.
        /// </summary>
        [Input("ossPrivateAccess")]
        public Input<Inputs.DomainOssPrivateAccessArgs>? OssPrivateAccess { get; set; }

        [Input("postMaxSizes")]
        private InputList<Inputs.DomainPostMaxSizeArgs>? _postMaxSizes;

        /// <summary>
        /// Maximum post size configuration.
        /// </summary>
        public InputList<Inputs.DomainPostMaxSizeArgs> PostMaxSizes
        {
            get => _postMaxSizes ?? (_postMaxSizes = new InputList<Inputs.DomainPostMaxSizeArgs>());
            set => _postMaxSizes = value;
        }

        /// <summary>
        /// The project CDN belongs to, default to 0.
        /// </summary>
        [Input("projectId")]
        public Input<int>? ProjectId { get; set; }

        /// <summary>
        /// Access authentication for OBS origin.
        /// </summary>
        [Input("qnPrivateAccess")]
        public Input<Inputs.DomainQnPrivateAccessArgs>? QnPrivateAccess { get; set; }

        /// <summary>
        /// QUIC switch, available values: `on`, `off` (default).
        /// </summary>
        [Input("quicSwitch")]
        public Input<string>? QuicSwitch { get; set; }

        /// <summary>
        /// Sharding back to source configuration switch. Valid values are `on` and `off`. Default value is `on`.
        /// </summary>
        [Input("rangeOriginSwitch")]
        public Input<string>? RangeOriginSwitch { get; set; }

        /// <summary>
        /// Referer configuration.
        /// </summary>
        [Input("referer")]
        public Input<Inputs.DomainRefererArgs>? Referer { get; set; }

        /// <summary>
        /// Request header configuration. It's a list and consist of at most one item.
        /// </summary>
        [Input("requestHeader")]
        public Input<Inputs.DomainRequestHeaderArgs>? RequestHeader { get; set; }

        /// <summary>
        /// Response header configurations.
        /// </summary>
        [Input("responseHeader")]
        public Input<Inputs.DomainResponseHeaderArgs>? ResponseHeader { get; set; }

        /// <summary>
        /// Response header cache switch, available values: `on`, `off` (default).
        /// </summary>
        [Input("responseHeaderCacheSwitch")]
        public Input<string>? ResponseHeaderCacheSwitch { get; set; }

        [Input("ruleCaches")]
        private InputList<Inputs.DomainRuleCachArgs>? _ruleCaches;

        /// <summary>
        /// Advanced path cache configuration.
        /// </summary>
        public InputList<Inputs.DomainRuleCachArgs> RuleCaches
        {
            get => _ruleCaches ?? (_ruleCaches = new InputList<Inputs.DomainRuleCachArgs>());
            set => _ruleCaches = value;
        }

        /// <summary>
        /// SEO switch, available values: `on`, `off` (default).
        /// </summary>
        [Input("seoSwitch")]
        public Input<string>? SeoSwitch { get; set; }

        /// <summary>
        /// Acceleration domain name service type. `web`: static acceleration, `download`: download acceleration, `media`: streaming media VOD acceleration, `hybrid`: hybrid acceleration, `dynamic`: dynamic acceleration.
        /// </summary>
        [Input("serviceType", required: true)]
        public Input<string> ServiceType { get; set; } = null!;

        /// <summary>
        /// Specific configuration for mainland, NOTE: Both specifying full schema or using it is superfluous, please use cloud api parameters json passthroughs, check the [Data Types](https://www.tencentcloud.com/document/api/228/31739#MainlandConfig) for more details.
        /// </summary>
        [Input("specificConfigMainland")]
        public Input<string>? SpecificConfigMainland { get; set; }

        /// <summary>
        /// Specific configuration for oversea, NOTE: Both specifying full schema or using it is superfluous, please use cloud api parameters json passthroughs, check the [Data Types](https://www.tencentcloud.com/document/api/228/31739#OverseaConfig) for more details.
        /// </summary>
        [Input("specificConfigOverseas")]
        public Input<string>? SpecificConfigOverseas { get; set; }

        /// <summary>
        /// Status code cache configurations.
        /// </summary>
        [Input("statusCodeCache")]
        public Input<Inputs.DomainStatusCodeCacheArgs>? StatusCodeCache { get; set; }

        [Input("tags")]
        private InputMap<object>? _tags;

        /// <summary>
        /// Tags of cdn domain.
        /// </summary>
        public InputMap<object> Tags
        {
            get => _tags ?? (_tags = new InputMap<object>());
            set => _tags = value;
        }

        /// <summary>
        /// Video seek switch, available values: `on`, `off` (default).
        /// </summary>
        [Input("videoSeekSwitch")]
        public Input<string>? VideoSeekSwitch { get; set; }

        public DomainArgs()
        {
        }
    }

    public sealed class DomainState : Pulumi.ResourceArgs
    {
        /// <summary>
        /// Domain name acceleration region. `mainland`: acceleration inside mainland China, `overseas`: acceleration outside mainland China, `global`: global acceleration. Overseas acceleration service must be enabled to use overseas acceleration and global acceleration.
        /// </summary>
        [Input("area")]
        public Input<string>? Area { get; set; }

        /// <summary>
        /// Specify timestamp hotlink protection configuration, NOTE: only one type can choose for the sub elements.
        /// </summary>
        [Input("authentication")]
        public Input<Inputs.DomainAuthenticationGetArgs>? Authentication { get; set; }

        /// <summary>
        /// Access authentication for S3 origin.
        /// </summary>
        [Input("awsPrivateAccess")]
        public Input<Inputs.DomainAwsPrivateAccessGetArgs>? AwsPrivateAccess { get; set; }

        /// <summary>
        /// Bandwidth cap configuration.
        /// </summary>
        [Input("bandWidthAlert")]
        public Input<Inputs.DomainBandWidthAlertGetArgs>? BandWidthAlert { get; set; }

        /// <summary>
        /// Cache key configuration (Ignore Query String configuration). NOTE: All of `full_url_cache` default value is `on`.
        /// </summary>
        [Input("cacheKey")]
        public Input<Inputs.DomainCacheKeyGetArgs>? CacheKey { get; set; }

        /// <summary>
        /// CNAME address of domain name.
        /// </summary>
        [Input("cname")]
        public Input<string>? Cname { get; set; }

        /// <summary>
        /// Smart compression configurations.
        /// </summary>
        [Input("compression")]
        public Input<Inputs.DomainCompressionGetArgs>? Compression { get; set; }

        /// <summary>
        /// Creation time of domain name.
        /// </summary>
        [Input("createTime")]
        public Input<string>? CreateTime { get; set; }

        /// <summary>
        /// Name of the acceleration domain.
        /// </summary>
        [Input("domain")]
        public Input<string>? CdnDomain { get; set; }

        /// <summary>
        /// Downstream capping configuration.
        /// </summary>
        [Input("downstreamCapping")]
        public Input<Inputs.DomainDownstreamCappingGetArgs>? DownstreamCapping { get; set; }

        /// <summary>
        /// Used for store `dry_run` request json.
        /// </summary>
        [Input("dryRunCreateResult")]
        public Input<string>? DryRunCreateResult { get; set; }

        /// <summary>
        /// Used for store `dry_run` update request json.
        /// </summary>
        [Input("dryRunUpdateResult")]
        public Input<string>? DryRunUpdateResult { get; set; }

        /// <summary>
        /// Error page configurations.
        /// </summary>
        [Input("errorPage")]
        public Input<Inputs.DomainErrorPageGetArgs>? ErrorPage { get; set; }

        /// <summary>
        /// Used for validate only by store arguments to request json string as expected, WARNING: if set to `true`, NO Cloud Api will be invoked but store as local data, do not use this argument unless you really know what you are doing.
        /// </summary>
        [Input("explicitUsingDryRun")]
        public Input<bool>? ExplicitUsingDryRun { get; set; }

        /// <summary>
        /// 301/302 redirect following switch, available values: `on`, `off` (default).
        /// </summary>
        [Input("followRedirectSwitch")]
        public Input<string>? FollowRedirectSwitch { get; set; }

        /// <summary>
        /// Use `cache_key` &gt; `full_url_cache` instead. Whether to enable full-path cache. Default value is `true`.
        /// </summary>
        [Input("fullUrlCache")]
        public Input<bool>? FullUrlCache { get; set; }

        /// <summary>
        /// HTTPS acceleration configuration. It's a list and consist of at most one item.
        /// </summary>
        [Input("httpsConfig")]
        public Input<Inputs.DomainHttpsConfigGetArgs>? HttpsConfig { get; set; }

        /// <summary>
        /// Access authentication for OBS origin.
        /// </summary>
        [Input("hwPrivateAccess")]
        public Input<Inputs.DomainHwPrivateAccessGetArgs>? HwPrivateAccess { get; set; }

        /// <summary>
        /// Specify Ip filter configurations.
        /// </summary>
        [Input("ipFilter")]
        public Input<Inputs.DomainIpFilterGetArgs>? IpFilter { get; set; }

        /// <summary>
        /// Specify Ip frequency limit configurations.
        /// </summary>
        [Input("ipFreqLimit")]
        public Input<Inputs.DomainIpFreqLimitGetArgs>? IpFreqLimit { get; set; }

        /// <summary>
        /// ipv6 access configuration switch. Only available when area set to `mainland`. Valid values are `on` and `off`. Default value is `off`.
        /// </summary>
        [Input("ipv6AccessSwitch")]
        public Input<string>? Ipv6AccessSwitch { get; set; }

        /// <summary>
        /// Browser cache configuration. (This feature is in beta and not generally available yet).
        /// </summary>
        [Input("maxAge")]
        public Input<Inputs.DomainMaxAgeGetArgs>? MaxAge { get; set; }

        /// <summary>
        /// Offline cache switch, available values: `on`, `off` (default).
        /// </summary>
        [Input("offlineCacheSwitch")]
        public Input<string>? OfflineCacheSwitch { get; set; }

        /// <summary>
        /// Origin server configuration. It's a list and consist of at most one item.
        /// </summary>
        [Input("origin")]
        public Input<Inputs.DomainOriginGetArgs>? Origin { get; set; }

        /// <summary>
        /// Cross-border linkage optimization configuration. (This feature is in beta and not generally available yet).
        /// </summary>
        [Input("originPullOptimization")]
        public Input<Inputs.DomainOriginPullOptimizationGetArgs>? OriginPullOptimization { get; set; }

        /// <summary>
        /// Cross-border linkage optimization configuration.
        /// </summary>
        [Input("originPullTimeout")]
        public Input<Inputs.DomainOriginPullTimeoutGetArgs>? OriginPullTimeout { get; set; }

        /// <summary>
        /// Access authentication for OSS origin.
        /// </summary>
        [Input("ossPrivateAccess")]
        public Input<Inputs.DomainOssPrivateAccessGetArgs>? OssPrivateAccess { get; set; }

        [Input("postMaxSizes")]
        private InputList<Inputs.DomainPostMaxSizeGetArgs>? _postMaxSizes;

        /// <summary>
        /// Maximum post size configuration.
        /// </summary>
        public InputList<Inputs.DomainPostMaxSizeGetArgs> PostMaxSizes
        {
            get => _postMaxSizes ?? (_postMaxSizes = new InputList<Inputs.DomainPostMaxSizeGetArgs>());
            set => _postMaxSizes = value;
        }

        /// <summary>
        /// The project CDN belongs to, default to 0.
        /// </summary>
        [Input("projectId")]
        public Input<int>? ProjectId { get; set; }

        /// <summary>
        /// Access authentication for OBS origin.
        /// </summary>
        [Input("qnPrivateAccess")]
        public Input<Inputs.DomainQnPrivateAccessGetArgs>? QnPrivateAccess { get; set; }

        /// <summary>
        /// QUIC switch, available values: `on`, `off` (default).
        /// </summary>
        [Input("quicSwitch")]
        public Input<string>? QuicSwitch { get; set; }

        /// <summary>
        /// Sharding back to source configuration switch. Valid values are `on` and `off`. Default value is `on`.
        /// </summary>
        [Input("rangeOriginSwitch")]
        public Input<string>? RangeOriginSwitch { get; set; }

        /// <summary>
        /// Referer configuration.
        /// </summary>
        [Input("referer")]
        public Input<Inputs.DomainRefererGetArgs>? Referer { get; set; }

        /// <summary>
        /// Request header configuration. It's a list and consist of at most one item.
        /// </summary>
        [Input("requestHeader")]
        public Input<Inputs.DomainRequestHeaderGetArgs>? RequestHeader { get; set; }

        /// <summary>
        /// Response header configurations.
        /// </summary>
        [Input("responseHeader")]
        public Input<Inputs.DomainResponseHeaderGetArgs>? ResponseHeader { get; set; }

        /// <summary>
        /// Response header cache switch, available values: `on`, `off` (default).
        /// </summary>
        [Input("responseHeaderCacheSwitch")]
        public Input<string>? ResponseHeaderCacheSwitch { get; set; }

        [Input("ruleCaches")]
        private InputList<Inputs.DomainRuleCachGetArgs>? _ruleCaches;

        /// <summary>
        /// Advanced path cache configuration.
        /// </summary>
        public InputList<Inputs.DomainRuleCachGetArgs> RuleCaches
        {
            get => _ruleCaches ?? (_ruleCaches = new InputList<Inputs.DomainRuleCachGetArgs>());
            set => _ruleCaches = value;
        }

        /// <summary>
        /// SEO switch, available values: `on`, `off` (default).
        /// </summary>
        [Input("seoSwitch")]
        public Input<string>? SeoSwitch { get; set; }

        /// <summary>
        /// Acceleration domain name service type. `web`: static acceleration, `download`: download acceleration, `media`: streaming media VOD acceleration, `hybrid`: hybrid acceleration, `dynamic`: dynamic acceleration.
        /// </summary>
        [Input("serviceType")]
        public Input<string>? ServiceType { get; set; }

        /// <summary>
        /// Specific configuration for mainland, NOTE: Both specifying full schema or using it is superfluous, please use cloud api parameters json passthroughs, check the [Data Types](https://www.tencentcloud.com/document/api/228/31739#MainlandConfig) for more details.
        /// </summary>
        [Input("specificConfigMainland")]
        public Input<string>? SpecificConfigMainland { get; set; }

        /// <summary>
        /// Specific configuration for oversea, NOTE: Both specifying full schema or using it is superfluous, please use cloud api parameters json passthroughs, check the [Data Types](https://www.tencentcloud.com/document/api/228/31739#OverseaConfig) for more details.
        /// </summary>
        [Input("specificConfigOverseas")]
        public Input<string>? SpecificConfigOverseas { get; set; }

        /// <summary>
        /// Acceleration service status.
        /// </summary>
        [Input("status")]
        public Input<string>? Status { get; set; }

        /// <summary>
        /// Status code cache configurations.
        /// </summary>
        [Input("statusCodeCache")]
        public Input<Inputs.DomainStatusCodeCacheGetArgs>? StatusCodeCache { get; set; }

        [Input("tags")]
        private InputMap<object>? _tags;

        /// <summary>
        /// Tags of cdn domain.
        /// </summary>
        public InputMap<object> Tags
        {
            get => _tags ?? (_tags = new InputMap<object>());
            set => _tags = value;
        }

        /// <summary>
        /// Video seek switch, available values: `on`, `off` (default).
        /// </summary>
        [Input("videoSeekSwitch")]
        public Input<string>? VideoSeekSwitch { get; set; }

        public DomainState()
        {
        }
    }
}
