// *** 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;

namespace Pulumi.Tctest.Dayu
{
    [TctestResourceType("tctest:Dayu/ddosPolicyCase:DdosPolicyCase")]
    public partial class DdosPolicyCase : Pulumi.CustomResource
    {
        /// <summary>
        /// App protocol set of the DDoS policy case.
        /// </summary>
        [Output("appProtocols")]
        public Output<ImmutableArray<string>> AppProtocols { get; private set; } = null!;

        /// <summary>
        /// App type of the DDoS policy case. Valid values: `WEB`, `GAME`, `APP` and `OTHER`.
        /// </summary>
        [Output("appType")]
        public Output<string> AppType { get; private set; } = null!;

        /// <summary>
        /// Create time of the DDoS policy case.
        /// </summary>
        [Output("createTime")]
        public Output<string> CreateTime { get; private set; } = null!;

        /// <summary>
        /// Indicate whether the service involves overseas or not. Valid values: `no` and `yes`.
        /// </summary>
        [Output("hasAbroad")]
        public Output<string> HasAbroad { get; private set; } = null!;

        /// <summary>
        /// Indicate whether the service actively initiates TCP requests or not. Valid values: `no` and `yes`.
        /// </summary>
        [Output("hasInitiateTcp")]
        public Output<string> HasInitiateTcp { get; private set; } = null!;

        /// <summary>
        /// Indicate whether the actively initiate UDP requests or not. Valid values: `no` and `yes`.
        /// </summary>
        [Output("hasInitiateUdp")]
        public Output<string?> HasInitiateUdp { get; private set; } = null!;

        /// <summary>
        /// Indicate whether the service involves VPN service or not. Valid values: `no` and `yes`.
        /// </summary>
        [Output("hasVpn")]
        public Output<string?> HasVpn { get; private set; } = null!;

        /// <summary>
        /// The max length of TCP message package, valid value length should be greater than 0 and less than 1500. It should be
        /// greater than `min_tcp_package_len`.
        /// </summary>
        [Output("maxTcpPackageLen")]
        public Output<string?> MaxTcpPackageLen { get; private set; } = null!;

        /// <summary>
        /// The max length of UDP message package, valid value length should be greater than 0 and less than 1500. It should be
        /// greater than `min_udp_package_len`.
        /// </summary>
        [Output("maxUdpPackageLen")]
        public Output<string?> MaxUdpPackageLen { get; private set; } = null!;

        /// <summary>
        /// The minimum length of TCP message package, valid value length should be greater than 0 and less than 1500.
        /// </summary>
        [Output("minTcpPackageLen")]
        public Output<string?> MinTcpPackageLen { get; private set; } = null!;

        /// <summary>
        /// The minimum length of UDP message package, valid value length should be greater than 0 and less than 1500.
        /// </summary>
        [Output("minUdpPackageLen")]
        public Output<string?> MinUdpPackageLen { get; private set; } = null!;

        /// <summary>
        /// Name of the DDoS policy case. Length should between 1 and 64.
        /// </summary>
        [Output("name")]
        public Output<string> Name { get; private set; } = null!;

        /// <summary>
        /// The port that actively initiates TCP requests. Valid value ranges: (1~65535).
        /// </summary>
        [Output("peerTcpPort")]
        public Output<string?> PeerTcpPort { get; private set; } = null!;

        /// <summary>
        /// The port that actively initiates UDP requests. Valid value ranges: (1~65535).
        /// </summary>
        [Output("peerUdpPort")]
        public Output<string?> PeerUdpPort { get; private set; } = null!;

        /// <summary>
        /// Platform set of the DDoS policy case.
        /// </summary>
        [Output("platformTypes")]
        public Output<ImmutableArray<string>> PlatformTypes { get; private set; } = null!;

        /// <summary>
        /// Type of the resource that the DDoS policy case works for. Valid values: `bgpip`, `bgp` and `bgp-multip`.
        /// </summary>
        [Output("resourceType")]
        public Output<string> ResourceType { get; private set; } = null!;

        /// <summary>
        /// ID of the DDoS policy case.
        /// </summary>
        [Output("sceneId")]
        public Output<string> SceneId { get; private set; } = null!;

        /// <summary>
        /// End port of the TCP service. Valid value ranges: (0~65535). It must be greater than `tcp_start_port`.
        /// </summary>
        [Output("tcpEndPort")]
        public Output<string> TcpEndPort { get; private set; } = null!;

        /// <summary>
        /// The fixed signature of TCP protocol load, valid value length is range from 1 to 512.
        /// </summary>
        [Output("tcpFootprint")]
        public Output<string?> TcpFootprint { get; private set; } = null!;

        /// <summary>
        /// Start port of the TCP service. Valid value ranges: (0~65535).
        /// </summary>
        [Output("tcpStartPort")]
        public Output<string> TcpStartPort { get; private set; } = null!;

        /// <summary>
        /// End port of the UDP service. Valid value ranges: (0~65535). It must be greater than `udp_start_port`.
        /// </summary>
        [Output("udpEndPort")]
        public Output<string> UdpEndPort { get; private set; } = null!;

        /// <summary>
        /// The fixed signature of TCP protocol load, valid value length is range from 1 to 512.
        /// </summary>
        [Output("udpFootprint")]
        public Output<string?> UdpFootprint { get; private set; } = null!;

        /// <summary>
        /// Start port of the UDP service. Valid value ranges: (0~65535).
        /// </summary>
        [Output("udpStartPort")]
        public Output<string> UdpStartPort { get; private set; } = null!;

        /// <summary>
        /// Web API url set.
        /// </summary>
        [Output("webApiUrls")]
        public Output<ImmutableArray<string>> WebApiUrls { get; private set; } = null!;


        /// <summary>
        /// Create a DdosPolicyCase 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 DdosPolicyCase(string name, DdosPolicyCaseArgs args, CustomResourceOptions? options = null)
            : base("tctest:Dayu/ddosPolicyCase:DdosPolicyCase", name, args ?? new DdosPolicyCaseArgs(), MakeResourceOptions(options, ""))
        {
        }

        private DdosPolicyCase(string name, Input<string> id, DdosPolicyCaseState? state = null, CustomResourceOptions? options = null)
            : base("tctest:Dayu/ddosPolicyCase:DdosPolicyCase", name, state, MakeResourceOptions(options, id))
        {
        }

        private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input<string>? id)
        {
            var defaultOptions = new CustomResourceOptions
            {
                Version = Utilities.Version,
            };
            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 DdosPolicyCase 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 DdosPolicyCase Get(string name, Input<string> id, DdosPolicyCaseState? state = null, CustomResourceOptions? options = null)
        {
            return new DdosPolicyCase(name, id, state, options);
        }
    }

    public sealed class DdosPolicyCaseArgs : Pulumi.ResourceArgs
    {
        [Input("appProtocols", required: true)]
        private InputList<string>? _appProtocols;

        /// <summary>
        /// App protocol set of the DDoS policy case.
        /// </summary>
        public InputList<string> AppProtocols
        {
            get => _appProtocols ?? (_appProtocols = new InputList<string>());
            set => _appProtocols = value;
        }

        /// <summary>
        /// App type of the DDoS policy case. Valid values: `WEB`, `GAME`, `APP` and `OTHER`.
        /// </summary>
        [Input("appType", required: true)]
        public Input<string> AppType { get; set; } = null!;

        /// <summary>
        /// Indicate whether the service involves overseas or not. Valid values: `no` and `yes`.
        /// </summary>
        [Input("hasAbroad", required: true)]
        public Input<string> HasAbroad { get; set; } = null!;

        /// <summary>
        /// Indicate whether the service actively initiates TCP requests or not. Valid values: `no` and `yes`.
        /// </summary>
        [Input("hasInitiateTcp", required: true)]
        public Input<string> HasInitiateTcp { get; set; } = null!;

        /// <summary>
        /// Indicate whether the actively initiate UDP requests or not. Valid values: `no` and `yes`.
        /// </summary>
        [Input("hasInitiateUdp")]
        public Input<string>? HasInitiateUdp { get; set; }

        /// <summary>
        /// Indicate whether the service involves VPN service or not. Valid values: `no` and `yes`.
        /// </summary>
        [Input("hasVpn")]
        public Input<string>? HasVpn { get; set; }

        /// <summary>
        /// The max length of TCP message package, valid value length should be greater than 0 and less than 1500. It should be
        /// greater than `min_tcp_package_len`.
        /// </summary>
        [Input("maxTcpPackageLen")]
        public Input<string>? MaxTcpPackageLen { get; set; }

        /// <summary>
        /// The max length of UDP message package, valid value length should be greater than 0 and less than 1500. It should be
        /// greater than `min_udp_package_len`.
        /// </summary>
        [Input("maxUdpPackageLen")]
        public Input<string>? MaxUdpPackageLen { get; set; }

        /// <summary>
        /// The minimum length of TCP message package, valid value length should be greater than 0 and less than 1500.
        /// </summary>
        [Input("minTcpPackageLen")]
        public Input<string>? MinTcpPackageLen { get; set; }

        /// <summary>
        /// The minimum length of UDP message package, valid value length should be greater than 0 and less than 1500.
        /// </summary>
        [Input("minUdpPackageLen")]
        public Input<string>? MinUdpPackageLen { get; set; }

        /// <summary>
        /// Name of the DDoS policy case. Length should between 1 and 64.
        /// </summary>
        [Input("name")]
        public Input<string>? Name { get; set; }

        /// <summary>
        /// The port that actively initiates TCP requests. Valid value ranges: (1~65535).
        /// </summary>
        [Input("peerTcpPort")]
        public Input<string>? PeerTcpPort { get; set; }

        /// <summary>
        /// The port that actively initiates UDP requests. Valid value ranges: (1~65535).
        /// </summary>
        [Input("peerUdpPort")]
        public Input<string>? PeerUdpPort { get; set; }

        [Input("platformTypes", required: true)]
        private InputList<string>? _platformTypes;

        /// <summary>
        /// Platform set of the DDoS policy case.
        /// </summary>
        public InputList<string> PlatformTypes
        {
            get => _platformTypes ?? (_platformTypes = new InputList<string>());
            set => _platformTypes = value;
        }

        /// <summary>
        /// Type of the resource that the DDoS policy case works for. Valid values: `bgpip`, `bgp` and `bgp-multip`.
        /// </summary>
        [Input("resourceType", required: true)]
        public Input<string> ResourceType { get; set; } = null!;

        /// <summary>
        /// End port of the TCP service. Valid value ranges: (0~65535). It must be greater than `tcp_start_port`.
        /// </summary>
        [Input("tcpEndPort", required: true)]
        public Input<string> TcpEndPort { get; set; } = null!;

        /// <summary>
        /// The fixed signature of TCP protocol load, valid value length is range from 1 to 512.
        /// </summary>
        [Input("tcpFootprint")]
        public Input<string>? TcpFootprint { get; set; }

        /// <summary>
        /// Start port of the TCP service. Valid value ranges: (0~65535).
        /// </summary>
        [Input("tcpStartPort", required: true)]
        public Input<string> TcpStartPort { get; set; } = null!;

        /// <summary>
        /// End port of the UDP service. Valid value ranges: (0~65535). It must be greater than `udp_start_port`.
        /// </summary>
        [Input("udpEndPort", required: true)]
        public Input<string> UdpEndPort { get; set; } = null!;

        /// <summary>
        /// The fixed signature of TCP protocol load, valid value length is range from 1 to 512.
        /// </summary>
        [Input("udpFootprint")]
        public Input<string>? UdpFootprint { get; set; }

        /// <summary>
        /// Start port of the UDP service. Valid value ranges: (0~65535).
        /// </summary>
        [Input("udpStartPort", required: true)]
        public Input<string> UdpStartPort { get; set; } = null!;

        [Input("webApiUrls", required: true)]
        private InputList<string>? _webApiUrls;

        /// <summary>
        /// Web API url set.
        /// </summary>
        public InputList<string> WebApiUrls
        {
            get => _webApiUrls ?? (_webApiUrls = new InputList<string>());
            set => _webApiUrls = value;
        }

        public DdosPolicyCaseArgs()
        {
        }
    }

    public sealed class DdosPolicyCaseState : Pulumi.ResourceArgs
    {
        [Input("appProtocols")]
        private InputList<string>? _appProtocols;

        /// <summary>
        /// App protocol set of the DDoS policy case.
        /// </summary>
        public InputList<string> AppProtocols
        {
            get => _appProtocols ?? (_appProtocols = new InputList<string>());
            set => _appProtocols = value;
        }

        /// <summary>
        /// App type of the DDoS policy case. Valid values: `WEB`, `GAME`, `APP` and `OTHER`.
        /// </summary>
        [Input("appType")]
        public Input<string>? AppType { get; set; }

        /// <summary>
        /// Create time of the DDoS policy case.
        /// </summary>
        [Input("createTime")]
        public Input<string>? CreateTime { get; set; }

        /// <summary>
        /// Indicate whether the service involves overseas or not. Valid values: `no` and `yes`.
        /// </summary>
        [Input("hasAbroad")]
        public Input<string>? HasAbroad { get; set; }

        /// <summary>
        /// Indicate whether the service actively initiates TCP requests or not. Valid values: `no` and `yes`.
        /// </summary>
        [Input("hasInitiateTcp")]
        public Input<string>? HasInitiateTcp { get; set; }

        /// <summary>
        /// Indicate whether the actively initiate UDP requests or not. Valid values: `no` and `yes`.
        /// </summary>
        [Input("hasInitiateUdp")]
        public Input<string>? HasInitiateUdp { get; set; }

        /// <summary>
        /// Indicate whether the service involves VPN service or not. Valid values: `no` and `yes`.
        /// </summary>
        [Input("hasVpn")]
        public Input<string>? HasVpn { get; set; }

        /// <summary>
        /// The max length of TCP message package, valid value length should be greater than 0 and less than 1500. It should be
        /// greater than `min_tcp_package_len`.
        /// </summary>
        [Input("maxTcpPackageLen")]
        public Input<string>? MaxTcpPackageLen { get; set; }

        /// <summary>
        /// The max length of UDP message package, valid value length should be greater than 0 and less than 1500. It should be
        /// greater than `min_udp_package_len`.
        /// </summary>
        [Input("maxUdpPackageLen")]
        public Input<string>? MaxUdpPackageLen { get; set; }

        /// <summary>
        /// The minimum length of TCP message package, valid value length should be greater than 0 and less than 1500.
        /// </summary>
        [Input("minTcpPackageLen")]
        public Input<string>? MinTcpPackageLen { get; set; }

        /// <summary>
        /// The minimum length of UDP message package, valid value length should be greater than 0 and less than 1500.
        /// </summary>
        [Input("minUdpPackageLen")]
        public Input<string>? MinUdpPackageLen { get; set; }

        /// <summary>
        /// Name of the DDoS policy case. Length should between 1 and 64.
        /// </summary>
        [Input("name")]
        public Input<string>? Name { get; set; }

        /// <summary>
        /// The port that actively initiates TCP requests. Valid value ranges: (1~65535).
        /// </summary>
        [Input("peerTcpPort")]
        public Input<string>? PeerTcpPort { get; set; }

        /// <summary>
        /// The port that actively initiates UDP requests. Valid value ranges: (1~65535).
        /// </summary>
        [Input("peerUdpPort")]
        public Input<string>? PeerUdpPort { get; set; }

        [Input("platformTypes")]
        private InputList<string>? _platformTypes;

        /// <summary>
        /// Platform set of the DDoS policy case.
        /// </summary>
        public InputList<string> PlatformTypes
        {
            get => _platformTypes ?? (_platformTypes = new InputList<string>());
            set => _platformTypes = value;
        }

        /// <summary>
        /// Type of the resource that the DDoS policy case works for. Valid values: `bgpip`, `bgp` and `bgp-multip`.
        /// </summary>
        [Input("resourceType")]
        public Input<string>? ResourceType { get; set; }

        /// <summary>
        /// ID of the DDoS policy case.
        /// </summary>
        [Input("sceneId")]
        public Input<string>? SceneId { get; set; }

        /// <summary>
        /// End port of the TCP service. Valid value ranges: (0~65535). It must be greater than `tcp_start_port`.
        /// </summary>
        [Input("tcpEndPort")]
        public Input<string>? TcpEndPort { get; set; }

        /// <summary>
        /// The fixed signature of TCP protocol load, valid value length is range from 1 to 512.
        /// </summary>
        [Input("tcpFootprint")]
        public Input<string>? TcpFootprint { get; set; }

        /// <summary>
        /// Start port of the TCP service. Valid value ranges: (0~65535).
        /// </summary>
        [Input("tcpStartPort")]
        public Input<string>? TcpStartPort { get; set; }

        /// <summary>
        /// End port of the UDP service. Valid value ranges: (0~65535). It must be greater than `udp_start_port`.
        /// </summary>
        [Input("udpEndPort")]
        public Input<string>? UdpEndPort { get; set; }

        /// <summary>
        /// The fixed signature of TCP protocol load, valid value length is range from 1 to 512.
        /// </summary>
        [Input("udpFootprint")]
        public Input<string>? UdpFootprint { get; set; }

        /// <summary>
        /// Start port of the UDP service. Valid value ranges: (0~65535).
        /// </summary>
        [Input("udpStartPort")]
        public Input<string>? UdpStartPort { get; set; }

        [Input("webApiUrls")]
        private InputList<string>? _webApiUrls;

        /// <summary>
        /// Web API url set.
        /// </summary>
        public InputList<string> WebApiUrls
        {
            get => _webApiUrls ?? (_webApiUrls = new InputList<string>());
            set => _webApiUrls = value;
        }

        public DdosPolicyCaseState()
        {
        }
    }
}
