// *** 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 Cuemby.Equinix
{
    /// <summary>
    /// Resource `equinix.ECXL2Serviceprofile` is used to manage layer 2 service profiles
    /// in Equinix Fabric.
    /// 
    /// This resource relies on the Equinix Fabric API. The parameters
    /// and attributes available map to the fields described at
    /// &lt;https://developer.equinix.com/catalog/sellerv3#operation/getProfileByIdOrNameUsingGET&gt;.
    /// 
    /// ## Example Usage
    /// 
    /// ```csharp
    /// using Pulumi;
    /// using Equinix = Cuemby.Equinix;
    /// 
    /// class MyStack : Stack
    /// {
    ///     public MyStack()
    ///     {
    ///         var private_profile = new Equinix.ECXL2Serviceprofile("private-profile", new Equinix.ECXL2ServiceprofileArgs
    ///         {
    ///             BandwidthThresholdNotifications = 
    ///             {
    ///                 "efpyi@example.com",
    ///                 "lyhxr@example.com",
    ///             },
    ///             ConnectionNameLabel = "Connection",
    ///             Description = "my private profile",
    ///             Features = new Equinix.Inputs.ECXL2ServiceprofileFeaturesArgs
    ///             {
    ///                 AllowRemoteConnections = true,
    ///                 TestProfile = false,
    ///             },
    ///             Ports = 
    ///             {
    ///                 new Equinix.Inputs.ECXL2ServiceprofilePortArgs
    ///                 {
    ///                     MetroCode = "NY",
    ///                     Uuid = "a867f685-422f-22f7-6de0-320a5c00abdd",
    ///                 },
    ///                 new Equinix.Inputs.ECXL2ServiceprofilePortArgs
    ///                 {
    ///                     MetroCode = "NY",
    ///                     Uuid = "a867f685-4231-2317-6de0-320a5c00abdd",
    ///                 },
    ///             },
    ///             Private = true,
    ///             PrivateUserEmails = 
    ///             {
    ///                 "efpyi@example.com",
    ///                 "lyhxr@example.com",
    ///             },
    ///             ProfileStatuschangeNotifications = 
    ///             {
    ///                 "efpyi@example.com",
    ///                 "lyhxr@example.com",
    ///             },
    ///             SpeedBands = 
    ///             {
    ///                 new Equinix.Inputs.ECXL2ServiceprofileSpeedBandArgs
    ///                 {
    ///                     Speed = 1000,
    ///                     SpeedUnit = "MB",
    ///                 },
    ///                 new Equinix.Inputs.ECXL2ServiceprofileSpeedBandArgs
    ///                 {
    ///                     Speed = 500,
    ///                     SpeedUnit = "MB",
    ///                 },
    ///                 new Equinix.Inputs.ECXL2ServiceprofileSpeedBandArgs
    ///                 {
    ///                     Speed = 100,
    ///                     SpeedUnit = "MB",
    ///                 },
    ///             },
    ///             VcStatuschangeNotifications = 
    ///             {
    ///                 "efpyi@example.com",
    ///                 "lyhxr@example.com",
    ///             },
    ///         });
    ///     }
    /// 
    /// }
    /// ```
    /// 
    /// ## Import
    /// 
    /// This resource can be imported using an existing ID
    /// 
    /// ```sh
    ///  $ pulumi import equinix:index/eCXL2Serviceprofile:ECXL2Serviceprofile example {existing_id}
    /// ```
    /// </summary>
    [EquinixResourceType("equinix:index/eCXL2Serviceprofile:ECXL2Serviceprofile")]
    public partial class ECXL2Serviceprofile : Pulumi.CustomResource
    {
        /// <summary>
        /// Boolean value that determines if API integration is enabled. It
        /// allows you to complete connection provisioning in less than five minutes. Without API Integration,
        /// additional manual steps will be required and the provisioning will likely take longer.
        /// </summary>
        [Output("apiIntegration")]
        public Output<bool?> ApiIntegration { get; private set; } = null!;

        /// <summary>
        /// Name of the authentication key label to be used by the
        /// Authentication Key service. It allows Service Providers with QinQ ports to accept groups of
        /// connections or VLANs from Dot1q customers. This is similar to S-Tag/C-Tag capabilities.
        /// </summary>
        [Output("authkeyLabel")]
        public Output<string?> AuthkeyLabel { get; private set; } = null!;

        /// <summary>
        /// Specifies the port bandwidth threshold percentage. If
        /// the bandwidth limit is met or exceeded, an alert is sent to the seller.
        /// </summary>
        [Output("bandwidthAlertThreshold")]
        public Output<double?> BandwidthAlertThreshold { get; private set; } = null!;

        /// <summary>
        /// A list of email addresses that will receive
        /// notifications about bandwidth thresholds.
        /// </summary>
        [Output("bandwidthThresholdNotifications")]
        public Output<ImmutableArray<string>> BandwidthThresholdNotifications { get; private set; } = null!;

        /// <summary>
        /// Custom name used for calling a connections
        /// e.g. `circuit`. Defaults to `Connection`.
        /// </summary>
        [Output("connectionNameLabel")]
        public Output<string?> ConnectionNameLabel { get; private set; } = null!;

        /// <summary>
        /// C-Tag/Inner-Tag label name for the connections.
        /// </summary>
        [Output("ctagLabel")]
        public Output<string?> CtagLabel { get; private set; } = null!;

        /// <summary>
        /// Description of the service profile.
        /// </summary>
        [Output("description")]
        public Output<string?> Description { get; private set; } = null!;

        /// <summary>
        /// Applicable when `api_integration` is set to `true`. It
        /// indicates whether the port and VLAN details are managed by Equinix.
        /// </summary>
        [Output("equinixManagedPortVlan")]
        public Output<bool?> EquinixManagedPortVlan { get; private set; } = null!;

        /// <summary>
        /// Block of profile features configuration. See Features below
        /// for more details.
        /// </summary>
        [Output("features")]
        public Output<Outputs.ECXL2ServiceprofileFeatures> Features { get; private set; } = null!;

        /// <summary>
        /// Specifies the API integration ID that was provided to the customer
        /// during onboarding. You can validate your API integration ID using the validateIntegrationId API.
        /// </summary>
        [Output("integrationId")]
        public Output<string?> IntegrationId { get; private set; } = null!;

        /// <summary>
        /// Name of the service profile. An alpha-numeric 50 characters string which can
        /// include only hyphens and underscores.
        /// </summary>
        [Output("name")]
        public Output<string> Name { get; private set; } = null!;

        /// <summary>
        /// You can set an alert for when a percentage of your profile has
        /// been sold. Service providers like to use this functionality to alert them when they need to add
        /// more ports or when they need to create a new service profile. Required with
        /// `oversubscription_allowed`, defaults to `1x`.
        /// </summary>
        [Output("oversubscription")]
        public Output<string?> Oversubscription { get; private set; } = null!;

        /// <summary>
        /// Boolean value that determines if, regardless of the
        /// utilization, Equinix Fabric will continue to add connections to your links until we reach the
        /// oversubscription limit. By selecting this service, you acknowledge that you will manage decisions
        /// on when to increase capacity on these link.
        /// </summary>
        [Output("oversubscriptionAllowed")]
        public Output<bool?> OversubscriptionAllowed { get; private set; } = null!;

        /// <summary>
        /// One or more definitions of ports residing in locations, from which your
        /// customers will be able to access services using this service profile. See Port below for
        /// more details.
        /// </summary>
        [Output("ports")]
        public Output<ImmutableArray<Outputs.ECXL2ServiceprofilePort>> Ports { get; private set; } = null!;

        /// <summary>
        /// Boolean value that indicates whether or not this is a private profile,
        /// i.e. not public like AWS/Azure/Oracle/Google, etc. If private, it can only be available for
        /// creating connections if correct permissions are granted.
        /// </summary>
        [Output("private")]
        public Output<bool?> Private { get; private set; } = null!;

        /// <summary>
        /// An array of users email ids who have permission to access this
        /// service profile. Argument is required when profile is set as private.
        /// </summary>
        [Output("privateUserEmails")]
        public Output<ImmutableArray<string>> PrivateUserEmails { get; private set; } = null!;

        /// <summary>
        /// A list of email addresses that will receive
        /// notifications about profile status changes.
        /// </summary>
        [Output("profileStatuschangeNotifications")]
        public Output<ImmutableArray<string>> ProfileStatuschangeNotifications { get; private set; } = null!;

        /// <summary>
        /// Boolean value that determines if your connections will require
        /// redundancy. if yes, then users need to create a secondary redundant connection.
        /// </summary>
        [Output("redundancyRequired")]
        public Output<bool?> RedundancyRequired { get; private set; } = null!;

        /// <summary>
        /// Indicates whether the VLAN ID of. the secondary
        /// connection is the same as the primary connection.
        /// </summary>
        [Output("secondaryVlanFromPrimary")]
        public Output<bool?> SecondaryVlanFromPrimary { get; private set; } = null!;

        /// <summary>
        /// Boolean value that indicates whether multiple connections
        /// can be created with the same authorization key to connect to this service profile after the first
        /// connection has been approved by the seller.
        /// </summary>
        [Output("servicekeyAutogenerated")]
        public Output<bool?> ServicekeyAutogenerated { get; private set; } = null!;

        /// <summary>
        /// One or more definitions of supported speed/bandwidth. Argument is
        /// required when `speed_from_api` is set to `false`. See Speed Band below for more
        /// details.
        /// </summary>
        [Output("speedBands")]
        public Output<ImmutableArray<Outputs.ECXL2ServiceprofileSpeedBand>> SpeedBands { get; private set; } = null!;

        /// <summary>
        /// Boolean value that determines if customer is allowed
        /// to enter a custom connection speed.
        /// </summary>
        [Output("speedCustomizationAllowed")]
        public Output<bool?> SpeedCustomizationAllowed { get; private set; } = null!;

        /// <summary>
        /// Boolean valuta that determines if connection speed will be derived
        /// from an API call. Argument has to be specified when `api_integration` is enabled.
        /// </summary>
        [Output("speedFromApi")]
        public Output<bool?> SpeedFromApi { get; private set; } = null!;

        /// <summary>
        /// Service profile provisioning status.
        /// </summary>
        [Output("state")]
        public Output<string> State { get; private set; } = null!;

        /// <summary>
        /// Specifies additional tagging information required by the seller profile
        /// for Dot1Q to QinQ translation. See [Enhance Dot1q to QinQ translation support](https://docs.equinix.com/es/Content/Interconnection/Fabric/layer-2/Fabric-Create-Layer2-Service-Profile.htm#:~:text=Enhance%20Dot1q%20to%20QinQ%20translation%20support)
        /// for additional information. Valid values are:
        /// </summary>
        [Output("tagType")]
        public Output<string?> TagType { get; private set; } = null!;

        /// <summary>
        /// Unique identifier of the port.
        /// </summary>
        [Output("uuid")]
        public Output<string> Uuid { get; private set; } = null!;

        /// <summary>
        /// A list of email addresses that will receive
        /// notifications about connections approvals and rejections.
        /// </summary>
        [Output("vcStatuschangeNotifications")]
        public Output<ImmutableArray<string>> VcStatuschangeNotifications { get; private set; } = null!;


        /// <summary>
        /// Create a ECXL2Serviceprofile 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 ECXL2Serviceprofile(string name, ECXL2ServiceprofileArgs args, CustomResourceOptions? options = null)
            : base("equinix:index/eCXL2Serviceprofile:ECXL2Serviceprofile", name, args ?? new ECXL2ServiceprofileArgs(), MakeResourceOptions(options, ""))
        {
        }

        private ECXL2Serviceprofile(string name, Input<string> id, ECXL2ServiceprofileState? state = null, CustomResourceOptions? options = null)
            : base("equinix:index/eCXL2Serviceprofile:ECXL2Serviceprofile", 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/cuemby",
            };
            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 ECXL2Serviceprofile 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 ECXL2Serviceprofile Get(string name, Input<string> id, ECXL2ServiceprofileState? state = null, CustomResourceOptions? options = null)
        {
            return new ECXL2Serviceprofile(name, id, state, options);
        }
    }

    public sealed class ECXL2ServiceprofileArgs : Pulumi.ResourceArgs
    {
        /// <summary>
        /// Boolean value that determines if API integration is enabled. It
        /// allows you to complete connection provisioning in less than five minutes. Without API Integration,
        /// additional manual steps will be required and the provisioning will likely take longer.
        /// </summary>
        [Input("apiIntegration")]
        public Input<bool>? ApiIntegration { get; set; }

        /// <summary>
        /// Name of the authentication key label to be used by the
        /// Authentication Key service. It allows Service Providers with QinQ ports to accept groups of
        /// connections or VLANs from Dot1q customers. This is similar to S-Tag/C-Tag capabilities.
        /// </summary>
        [Input("authkeyLabel")]
        public Input<string>? AuthkeyLabel { get; set; }

        /// <summary>
        /// Specifies the port bandwidth threshold percentage. If
        /// the bandwidth limit is met or exceeded, an alert is sent to the seller.
        /// </summary>
        [Input("bandwidthAlertThreshold")]
        public Input<double>? BandwidthAlertThreshold { get; set; }

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

        /// <summary>
        /// A list of email addresses that will receive
        /// notifications about bandwidth thresholds.
        /// </summary>
        public InputList<string> BandwidthThresholdNotifications
        {
            get => _bandwidthThresholdNotifications ?? (_bandwidthThresholdNotifications = new InputList<string>());
            set => _bandwidthThresholdNotifications = value;
        }

        /// <summary>
        /// Custom name used for calling a connections
        /// e.g. `circuit`. Defaults to `Connection`.
        /// </summary>
        [Input("connectionNameLabel")]
        public Input<string>? ConnectionNameLabel { get; set; }

        /// <summary>
        /// C-Tag/Inner-Tag label name for the connections.
        /// </summary>
        [Input("ctagLabel")]
        public Input<string>? CtagLabel { get; set; }

        /// <summary>
        /// Description of the service profile.
        /// </summary>
        [Input("description")]
        public Input<string>? Description { get; set; }

        /// <summary>
        /// Applicable when `api_integration` is set to `true`. It
        /// indicates whether the port and VLAN details are managed by Equinix.
        /// </summary>
        [Input("equinixManagedPortVlan")]
        public Input<bool>? EquinixManagedPortVlan { get; set; }

        /// <summary>
        /// Block of profile features configuration. See Features below
        /// for more details.
        /// </summary>
        [Input("features", required: true)]
        public Input<Inputs.ECXL2ServiceprofileFeaturesArgs> Features { get; set; } = null!;

        /// <summary>
        /// Specifies the API integration ID that was provided to the customer
        /// during onboarding. You can validate your API integration ID using the validateIntegrationId API.
        /// </summary>
        [Input("integrationId")]
        public Input<string>? IntegrationId { get; set; }

        /// <summary>
        /// Name of the service profile. An alpha-numeric 50 characters string which can
        /// include only hyphens and underscores.
        /// </summary>
        [Input("name")]
        public Input<string>? Name { get; set; }

        /// <summary>
        /// You can set an alert for when a percentage of your profile has
        /// been sold. Service providers like to use this functionality to alert them when they need to add
        /// more ports or when they need to create a new service profile. Required with
        /// `oversubscription_allowed`, defaults to `1x`.
        /// </summary>
        [Input("oversubscription")]
        public Input<string>? Oversubscription { get; set; }

        /// <summary>
        /// Boolean value that determines if, regardless of the
        /// utilization, Equinix Fabric will continue to add connections to your links until we reach the
        /// oversubscription limit. By selecting this service, you acknowledge that you will manage decisions
        /// on when to increase capacity on these link.
        /// </summary>
        [Input("oversubscriptionAllowed")]
        public Input<bool>? OversubscriptionAllowed { get; set; }

        [Input("ports", required: true)]
        private InputList<Inputs.ECXL2ServiceprofilePortArgs>? _ports;

        /// <summary>
        /// One or more definitions of ports residing in locations, from which your
        /// customers will be able to access services using this service profile. See Port below for
        /// more details.
        /// </summary>
        public InputList<Inputs.ECXL2ServiceprofilePortArgs> Ports
        {
            get => _ports ?? (_ports = new InputList<Inputs.ECXL2ServiceprofilePortArgs>());
            set => _ports = value;
        }

        /// <summary>
        /// Boolean value that indicates whether or not this is a private profile,
        /// i.e. not public like AWS/Azure/Oracle/Google, etc. If private, it can only be available for
        /// creating connections if correct permissions are granted.
        /// </summary>
        [Input("private")]
        public Input<bool>? Private { get; set; }

        [Input("privateUserEmails")]
        private InputList<string>? _privateUserEmails;

        /// <summary>
        /// An array of users email ids who have permission to access this
        /// service profile. Argument is required when profile is set as private.
        /// </summary>
        public InputList<string> PrivateUserEmails
        {
            get => _privateUserEmails ?? (_privateUserEmails = new InputList<string>());
            set => _privateUserEmails = value;
        }

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

        /// <summary>
        /// A list of email addresses that will receive
        /// notifications about profile status changes.
        /// </summary>
        public InputList<string> ProfileStatuschangeNotifications
        {
            get => _profileStatuschangeNotifications ?? (_profileStatuschangeNotifications = new InputList<string>());
            set => _profileStatuschangeNotifications = value;
        }

        /// <summary>
        /// Boolean value that determines if your connections will require
        /// redundancy. if yes, then users need to create a secondary redundant connection.
        /// </summary>
        [Input("redundancyRequired")]
        public Input<bool>? RedundancyRequired { get; set; }

        /// <summary>
        /// Indicates whether the VLAN ID of. the secondary
        /// connection is the same as the primary connection.
        /// </summary>
        [Input("secondaryVlanFromPrimary")]
        public Input<bool>? SecondaryVlanFromPrimary { get; set; }

        /// <summary>
        /// Boolean value that indicates whether multiple connections
        /// can be created with the same authorization key to connect to this service profile after the first
        /// connection has been approved by the seller.
        /// </summary>
        [Input("servicekeyAutogenerated")]
        public Input<bool>? ServicekeyAutogenerated { get; set; }

        [Input("speedBands")]
        private InputList<Inputs.ECXL2ServiceprofileSpeedBandArgs>? _speedBands;

        /// <summary>
        /// One or more definitions of supported speed/bandwidth. Argument is
        /// required when `speed_from_api` is set to `false`. See Speed Band below for more
        /// details.
        /// </summary>
        public InputList<Inputs.ECXL2ServiceprofileSpeedBandArgs> SpeedBands
        {
            get => _speedBands ?? (_speedBands = new InputList<Inputs.ECXL2ServiceprofileSpeedBandArgs>());
            set => _speedBands = value;
        }

        /// <summary>
        /// Boolean value that determines if customer is allowed
        /// to enter a custom connection speed.
        /// </summary>
        [Input("speedCustomizationAllowed")]
        public Input<bool>? SpeedCustomizationAllowed { get; set; }

        /// <summary>
        /// Boolean valuta that determines if connection speed will be derived
        /// from an API call. Argument has to be specified when `api_integration` is enabled.
        /// </summary>
        [Input("speedFromApi")]
        public Input<bool>? SpeedFromApi { get; set; }

        /// <summary>
        /// Specifies additional tagging information required by the seller profile
        /// for Dot1Q to QinQ translation. See [Enhance Dot1q to QinQ translation support](https://docs.equinix.com/es/Content/Interconnection/Fabric/layer-2/Fabric-Create-Layer2-Service-Profile.htm#:~:text=Enhance%20Dot1q%20to%20QinQ%20translation%20support)
        /// for additional information. Valid values are:
        /// </summary>
        [Input("tagType")]
        public Input<string>? TagType { get; set; }

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

        /// <summary>
        /// A list of email addresses that will receive
        /// notifications about connections approvals and rejections.
        /// </summary>
        public InputList<string> VcStatuschangeNotifications
        {
            get => _vcStatuschangeNotifications ?? (_vcStatuschangeNotifications = new InputList<string>());
            set => _vcStatuschangeNotifications = value;
        }

        public ECXL2ServiceprofileArgs()
        {
        }
    }

    public sealed class ECXL2ServiceprofileState : Pulumi.ResourceArgs
    {
        /// <summary>
        /// Boolean value that determines if API integration is enabled. It
        /// allows you to complete connection provisioning in less than five minutes. Without API Integration,
        /// additional manual steps will be required and the provisioning will likely take longer.
        /// </summary>
        [Input("apiIntegration")]
        public Input<bool>? ApiIntegration { get; set; }

        /// <summary>
        /// Name of the authentication key label to be used by the
        /// Authentication Key service. It allows Service Providers with QinQ ports to accept groups of
        /// connections or VLANs from Dot1q customers. This is similar to S-Tag/C-Tag capabilities.
        /// </summary>
        [Input("authkeyLabel")]
        public Input<string>? AuthkeyLabel { get; set; }

        /// <summary>
        /// Specifies the port bandwidth threshold percentage. If
        /// the bandwidth limit is met or exceeded, an alert is sent to the seller.
        /// </summary>
        [Input("bandwidthAlertThreshold")]
        public Input<double>? BandwidthAlertThreshold { get; set; }

        [Input("bandwidthThresholdNotifications")]
        private InputList<string>? _bandwidthThresholdNotifications;

        /// <summary>
        /// A list of email addresses that will receive
        /// notifications about bandwidth thresholds.
        /// </summary>
        public InputList<string> BandwidthThresholdNotifications
        {
            get => _bandwidthThresholdNotifications ?? (_bandwidthThresholdNotifications = new InputList<string>());
            set => _bandwidthThresholdNotifications = value;
        }

        /// <summary>
        /// Custom name used for calling a connections
        /// e.g. `circuit`. Defaults to `Connection`.
        /// </summary>
        [Input("connectionNameLabel")]
        public Input<string>? ConnectionNameLabel { get; set; }

        /// <summary>
        /// C-Tag/Inner-Tag label name for the connections.
        /// </summary>
        [Input("ctagLabel")]
        public Input<string>? CtagLabel { get; set; }

        /// <summary>
        /// Description of the service profile.
        /// </summary>
        [Input("description")]
        public Input<string>? Description { get; set; }

        /// <summary>
        /// Applicable when `api_integration` is set to `true`. It
        /// indicates whether the port and VLAN details are managed by Equinix.
        /// </summary>
        [Input("equinixManagedPortVlan")]
        public Input<bool>? EquinixManagedPortVlan { get; set; }

        /// <summary>
        /// Block of profile features configuration. See Features below
        /// for more details.
        /// </summary>
        [Input("features")]
        public Input<Inputs.ECXL2ServiceprofileFeaturesGetArgs>? Features { get; set; }

        /// <summary>
        /// Specifies the API integration ID that was provided to the customer
        /// during onboarding. You can validate your API integration ID using the validateIntegrationId API.
        /// </summary>
        [Input("integrationId")]
        public Input<string>? IntegrationId { get; set; }

        /// <summary>
        /// Name of the service profile. An alpha-numeric 50 characters string which can
        /// include only hyphens and underscores.
        /// </summary>
        [Input("name")]
        public Input<string>? Name { get; set; }

        /// <summary>
        /// You can set an alert for when a percentage of your profile has
        /// been sold. Service providers like to use this functionality to alert them when they need to add
        /// more ports or when they need to create a new service profile. Required with
        /// `oversubscription_allowed`, defaults to `1x`.
        /// </summary>
        [Input("oversubscription")]
        public Input<string>? Oversubscription { get; set; }

        /// <summary>
        /// Boolean value that determines if, regardless of the
        /// utilization, Equinix Fabric will continue to add connections to your links until we reach the
        /// oversubscription limit. By selecting this service, you acknowledge that you will manage decisions
        /// on when to increase capacity on these link.
        /// </summary>
        [Input("oversubscriptionAllowed")]
        public Input<bool>? OversubscriptionAllowed { get; set; }

        [Input("ports")]
        private InputList<Inputs.ECXL2ServiceprofilePortGetArgs>? _ports;

        /// <summary>
        /// One or more definitions of ports residing in locations, from which your
        /// customers will be able to access services using this service profile. See Port below for
        /// more details.
        /// </summary>
        public InputList<Inputs.ECXL2ServiceprofilePortGetArgs> Ports
        {
            get => _ports ?? (_ports = new InputList<Inputs.ECXL2ServiceprofilePortGetArgs>());
            set => _ports = value;
        }

        /// <summary>
        /// Boolean value that indicates whether or not this is a private profile,
        /// i.e. not public like AWS/Azure/Oracle/Google, etc. If private, it can only be available for
        /// creating connections if correct permissions are granted.
        /// </summary>
        [Input("private")]
        public Input<bool>? Private { get; set; }

        [Input("privateUserEmails")]
        private InputList<string>? _privateUserEmails;

        /// <summary>
        /// An array of users email ids who have permission to access this
        /// service profile. Argument is required when profile is set as private.
        /// </summary>
        public InputList<string> PrivateUserEmails
        {
            get => _privateUserEmails ?? (_privateUserEmails = new InputList<string>());
            set => _privateUserEmails = value;
        }

        [Input("profileStatuschangeNotifications")]
        private InputList<string>? _profileStatuschangeNotifications;

        /// <summary>
        /// A list of email addresses that will receive
        /// notifications about profile status changes.
        /// </summary>
        public InputList<string> ProfileStatuschangeNotifications
        {
            get => _profileStatuschangeNotifications ?? (_profileStatuschangeNotifications = new InputList<string>());
            set => _profileStatuschangeNotifications = value;
        }

        /// <summary>
        /// Boolean value that determines if your connections will require
        /// redundancy. if yes, then users need to create a secondary redundant connection.
        /// </summary>
        [Input("redundancyRequired")]
        public Input<bool>? RedundancyRequired { get; set; }

        /// <summary>
        /// Indicates whether the VLAN ID of. the secondary
        /// connection is the same as the primary connection.
        /// </summary>
        [Input("secondaryVlanFromPrimary")]
        public Input<bool>? SecondaryVlanFromPrimary { get; set; }

        /// <summary>
        /// Boolean value that indicates whether multiple connections
        /// can be created with the same authorization key to connect to this service profile after the first
        /// connection has been approved by the seller.
        /// </summary>
        [Input("servicekeyAutogenerated")]
        public Input<bool>? ServicekeyAutogenerated { get; set; }

        [Input("speedBands")]
        private InputList<Inputs.ECXL2ServiceprofileSpeedBandGetArgs>? _speedBands;

        /// <summary>
        /// One or more definitions of supported speed/bandwidth. Argument is
        /// required when `speed_from_api` is set to `false`. See Speed Band below for more
        /// details.
        /// </summary>
        public InputList<Inputs.ECXL2ServiceprofileSpeedBandGetArgs> SpeedBands
        {
            get => _speedBands ?? (_speedBands = new InputList<Inputs.ECXL2ServiceprofileSpeedBandGetArgs>());
            set => _speedBands = value;
        }

        /// <summary>
        /// Boolean value that determines if customer is allowed
        /// to enter a custom connection speed.
        /// </summary>
        [Input("speedCustomizationAllowed")]
        public Input<bool>? SpeedCustomizationAllowed { get; set; }

        /// <summary>
        /// Boolean valuta that determines if connection speed will be derived
        /// from an API call. Argument has to be specified when `api_integration` is enabled.
        /// </summary>
        [Input("speedFromApi")]
        public Input<bool>? SpeedFromApi { get; set; }

        /// <summary>
        /// Service profile provisioning status.
        /// </summary>
        [Input("state")]
        public Input<string>? State { get; set; }

        /// <summary>
        /// Specifies additional tagging information required by the seller profile
        /// for Dot1Q to QinQ translation. See [Enhance Dot1q to QinQ translation support](https://docs.equinix.com/es/Content/Interconnection/Fabric/layer-2/Fabric-Create-Layer2-Service-Profile.htm#:~:text=Enhance%20Dot1q%20to%20QinQ%20translation%20support)
        /// for additional information. Valid values are:
        /// </summary>
        [Input("tagType")]
        public Input<string>? TagType { get; set; }

        /// <summary>
        /// Unique identifier of the port.
        /// </summary>
        [Input("uuid")]
        public Input<string>? Uuid { get; set; }

        [Input("vcStatuschangeNotifications")]
        private InputList<string>? _vcStatuschangeNotifications;

        /// <summary>
        /// A list of email addresses that will receive
        /// notifications about connections approvals and rejections.
        /// </summary>
        public InputList<string> VcStatuschangeNotifications
        {
            get => _vcStatuschangeNotifications ?? (_vcStatuschangeNotifications = new InputList<string>());
            set => _vcStatuschangeNotifications = value;
        }

        public ECXL2ServiceprofileState()
        {
        }
    }
}
