<filename>sdk/dotnet/CapsMan/Rates.cs// *** 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.Routeros.CapsMan
{
    /// <summary>
    /// ## Example Usage
    /// 
    /// ```csharp
    /// using System.Collections.Generic;
    /// using System.Linq;
    /// using Pulumi;
    /// using Routeros = Pulumi.Routeros;
    /// 
    /// return await Deployment.RunAsync(() =&gt; 
    /// {
    ///     var testRates = new Routeros.CapsMan.Rates("testRates", new()
    ///     {
    ///         Basics = new[]
    ///         {
    ///             "1Mbps",
    ///             "5.5Mbps",
    ///             "6Mbps",
    ///             "18Mbps",
    ///             "36Mbps",
    ///             "54Mbps",
    ///         },
    ///         Comment = "test_rates",
    ///         HtBasicMcs = new[]
    ///         {
    ///             "mcs-0",
    ///             "mcs-7",
    ///             "mcs-11",
    ///             "mcs-14",
    ///             "mcs-16",
    ///             "mcs-21",
    ///         },
    ///         HtSupportedMcs = new[]
    ///         {
    ///             "mcs-3",
    ///             "mcs-8",
    ///             "mcs-10",
    ///             "mcs-13",
    ///             "mcs-17",
    ///             "mcs-18",
    ///         },
    ///         Supporteds = new[]
    ///         {
    ///             "2Mbps",
    ///             "11Mbps",
    ///             "9Mbps",
    ///             "12Mbps",
    ///             "24Mbps",
    ///             "48Mbps",
    ///         },
    ///         VhtBasicMcs = "none",
    ///         VhtSupportedMcs = "mcs0-9,mcs0-7",
    ///     });
    /// 
    /// });
    /// ```
    /// 
    /// ## Import
    /// 
    /// Import with the name of the CAPsMAN rates configuration in case of the example use test-rates-config
    /// 
    /// ```sh
    ///  $ pulumi import routeros:CapsMan/rates:Rates test_rates test-rates-config
    /// ```
    /// </summary>
    [RouterosResourceType("routeros:CapsMan/rates:Rates")]
    public partial class Rates : global::Pulumi.CustomResource
    {
        /// <summary>
        /// &lt;em&gt;Resource ID type (.id / name). This is an internal service field, setting a value is not required.&lt;/em&gt;
        /// </summary>
        [Output("___id_")]
        public Output<int?> ___id_ { get; private set; } = null!;

        /// <summary>
        /// &lt;em&gt;Resource path for CRUD operations. This is an internal service field, setting a value is not required.&lt;/em&gt;
        /// </summary>
        [Output("___path_")]
        public Output<string?> ___path_ { get; private set; } = null!;

        /// <summary>
        /// List of basic rates. Client will connect to AP only if it supports all basic rates announced by the AP. AP will establish WDS link only if it supports all basic rates of the other AP.
        /// </summary>
        [Output("basics")]
        public Output<ImmutableArray<string>> Basics { get; private set; } = null!;

        [Output("comment")]
        public Output<string?> Comment { get; private set; } = null!;

        /// <summary>
        /// Modulation and Coding Schemes that every connecting client must support. Refer to 802.11n for MCS specification.
        /// </summary>
        [Output("htBasicMcs")]
        public Output<ImmutableArray<string>> HtBasicMcs { get; private set; } = null!;

        /// <summary>
        /// Modulation and Coding Schemes that this device advertises as supported. Refer to 802.11n for MCS specification.
        /// </summary>
        [Output("htSupportedMcs")]
        public Output<ImmutableArray<string>> HtSupportedMcs { get; private set; } = null!;

        /// <summary>
        /// Changing the name of this resource will force it to be recreated. &gt; The links of other configuration properties to this
        /// resource may be lost! &gt; Changing the name of the resource outside of a Terraform will result in a loss of control
        /// integrity for that resource!
        /// </summary>
        [Output("name")]
        public Output<string> Name { get; private set; } = null!;

        /// <summary>
        /// List of supported rates. Two devices will communicate only using rates that are supported by both devices.
        /// </summary>
        [Output("supporteds")]
        public Output<ImmutableArray<string>> Supporteds { get; private set; } = null!;

        /// <summary>
        /// Modulation and Coding Schemes that every connecting client must support. Refer to 802.11ac for MCS specification. You can set MCS interval for each of Spatial Stream none - will not use selected Spatial Stream MCS 0-7 - client must support MCS-0 to MCS-7 MCS 0-8 - client must support MCS-0 to MCS-8 MCS 0-9 - client must support MCS-0 to MCS-9
        /// </summary>
        [Output("vhtBasicMcs")]
        public Output<string> VhtBasicMcs { get; private set; } = null!;

        /// <summary>
        /// Modulation and Coding Schemes that this device advertises as supported. Refer to 802.11ac for MCS specification. You can set MCS interval for each of Spatial Stream none - will not use selected Spatial Stream MCS 0-7 - devices will advertise as supported MCS-0 to MCS-7 MCS 0-8 - devices will advertise as supported MCS-0 to MCS-8 MCS 0-9 - devices will advertise as supported MCS-0 to MCS-9
        /// </summary>
        [Output("vhtSupportedMcs")]
        public Output<string> VhtSupportedMcs { get; private set; } = null!;


        /// <summary>
        /// Create a Rates 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 Rates(string name, RatesArgs? args = null, CustomResourceOptions? options = null)
            : base("routeros:CapsMan/rates:Rates", name, args ?? new RatesArgs(), MakeResourceOptions(options, ""))
        {
        }

        private Rates(string name, Input<string> id, RatesState? state = null, CustomResourceOptions? options = null)
            : base("routeros:CapsMan/rates:Rates", 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 Rates 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 Rates Get(string name, Input<string> id, RatesState? state = null, CustomResourceOptions? options = null)
        {
            return new Rates(name, id, state, options);
        }
    }

    public sealed class RatesArgs : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// &lt;em&gt;Resource ID type (.id / name). This is an internal service field, setting a value is not required.&lt;/em&gt;
        /// </summary>
        [Input("___id_")]
        public Input<int>? ___id_ { get; set; }

        /// <summary>
        /// &lt;em&gt;Resource path for CRUD operations. This is an internal service field, setting a value is not required.&lt;/em&gt;
        /// </summary>
        [Input("___path_")]
        public Input<string>? ___path_ { get; set; }

        [Input("basics")]
        private InputList<string>? _basics;

        /// <summary>
        /// List of basic rates. Client will connect to AP only if it supports all basic rates announced by the AP. AP will establish WDS link only if it supports all basic rates of the other AP.
        /// </summary>
        public InputList<string> Basics
        {
            get => _basics ?? (_basics = new InputList<string>());
            set => _basics = value;
        }

        [Input("comment")]
        public Input<string>? Comment { get; set; }

        [Input("htBasicMcs")]
        private InputList<string>? _htBasicMcs;

        /// <summary>
        /// Modulation and Coding Schemes that every connecting client must support. Refer to 802.11n for MCS specification.
        /// </summary>
        public InputList<string> HtBasicMcs
        {
            get => _htBasicMcs ?? (_htBasicMcs = new InputList<string>());
            set => _htBasicMcs = value;
        }

        [Input("htSupportedMcs")]
        private InputList<string>? _htSupportedMcs;

        /// <summary>
        /// Modulation and Coding Schemes that this device advertises as supported. Refer to 802.11n for MCS specification.
        /// </summary>
        public InputList<string> HtSupportedMcs
        {
            get => _htSupportedMcs ?? (_htSupportedMcs = new InputList<string>());
            set => _htSupportedMcs = value;
        }

        /// <summary>
        /// Changing the name of this resource will force it to be recreated. &gt; The links of other configuration properties to this
        /// resource may be lost! &gt; Changing the name of the resource outside of a Terraform will result in a loss of control
        /// integrity for that resource!
        /// </summary>
        [Input("name")]
        public Input<string>? Name { get; set; }

        [Input("supporteds")]
        private InputList<string>? _supporteds;

        /// <summary>
        /// List of supported rates. Two devices will communicate only using rates that are supported by both devices.
        /// </summary>
        public InputList<string> Supporteds
        {
            get => _supporteds ?? (_supporteds = new InputList<string>());
            set => _supporteds = value;
        }

        /// <summary>
        /// Modulation and Coding Schemes that every connecting client must support. Refer to 802.11ac for MCS specification. You can set MCS interval for each of Spatial Stream none - will not use selected Spatial Stream MCS 0-7 - client must support MCS-0 to MCS-7 MCS 0-8 - client must support MCS-0 to MCS-8 MCS 0-9 - client must support MCS-0 to MCS-9
        /// </summary>
        [Input("vhtBasicMcs")]
        public Input<string>? VhtBasicMcs { get; set; }

        /// <summary>
        /// Modulation and Coding Schemes that this device advertises as supported. Refer to 802.11ac for MCS specification. You can set MCS interval for each of Spatial Stream none - will not use selected Spatial Stream MCS 0-7 - devices will advertise as supported MCS-0 to MCS-7 MCS 0-8 - devices will advertise as supported MCS-0 to MCS-8 MCS 0-9 - devices will advertise as supported MCS-0 to MCS-9
        /// </summary>
        [Input("vhtSupportedMcs")]
        public Input<string>? VhtSupportedMcs { get; set; }

        public RatesArgs()
        {
        }
        public static new RatesArgs Empty => new RatesArgs();
    }

    public sealed class RatesState : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// &lt;em&gt;Resource ID type (.id / name). This is an internal service field, setting a value is not required.&lt;/em&gt;
        /// </summary>
        [Input("___id_")]
        public Input<int>? ___id_ { get; set; }

        /// <summary>
        /// &lt;em&gt;Resource path for CRUD operations. This is an internal service field, setting a value is not required.&lt;/em&gt;
        /// </summary>
        [Input("___path_")]
        public Input<string>? ___path_ { get; set; }

        [Input("basics")]
        private InputList<string>? _basics;

        /// <summary>
        /// List of basic rates. Client will connect to AP only if it supports all basic rates announced by the AP. AP will establish WDS link only if it supports all basic rates of the other AP.
        /// </summary>
        public InputList<string> Basics
        {
            get => _basics ?? (_basics = new InputList<string>());
            set => _basics = value;
        }

        [Input("comment")]
        public Input<string>? Comment { get; set; }

        [Input("htBasicMcs")]
        private InputList<string>? _htBasicMcs;

        /// <summary>
        /// Modulation and Coding Schemes that every connecting client must support. Refer to 802.11n for MCS specification.
        /// </summary>
        public InputList<string> HtBasicMcs
        {
            get => _htBasicMcs ?? (_htBasicMcs = new InputList<string>());
            set => _htBasicMcs = value;
        }

        [Input("htSupportedMcs")]
        private InputList<string>? _htSupportedMcs;

        /// <summary>
        /// Modulation and Coding Schemes that this device advertises as supported. Refer to 802.11n for MCS specification.
        /// </summary>
        public InputList<string> HtSupportedMcs
        {
            get => _htSupportedMcs ?? (_htSupportedMcs = new InputList<string>());
            set => _htSupportedMcs = value;
        }

        /// <summary>
        /// Changing the name of this resource will force it to be recreated. &gt; The links of other configuration properties to this
        /// resource may be lost! &gt; Changing the name of the resource outside of a Terraform will result in a loss of control
        /// integrity for that resource!
        /// </summary>
        [Input("name")]
        public Input<string>? Name { get; set; }

        [Input("supporteds")]
        private InputList<string>? _supporteds;

        /// <summary>
        /// List of supported rates. Two devices will communicate only using rates that are supported by both devices.
        /// </summary>
        public InputList<string> Supporteds
        {
            get => _supporteds ?? (_supporteds = new InputList<string>());
            set => _supporteds = value;
        }

        /// <summary>
        /// Modulation and Coding Schemes that every connecting client must support. Refer to 802.11ac for MCS specification. You can set MCS interval for each of Spatial Stream none - will not use selected Spatial Stream MCS 0-7 - client must support MCS-0 to MCS-7 MCS 0-8 - client must support MCS-0 to MCS-8 MCS 0-9 - client must support MCS-0 to MCS-9
        /// </summary>
        [Input("vhtBasicMcs")]
        public Input<string>? VhtBasicMcs { get; set; }

        /// <summary>
        /// Modulation and Coding Schemes that this device advertises as supported. Refer to 802.11ac for MCS specification. You can set MCS interval for each of Spatial Stream none - will not use selected Spatial Stream MCS 0-7 - devices will advertise as supported MCS-0 to MCS-7 MCS 0-8 - devices will advertise as supported MCS-0 to MCS-8 MCS 0-9 - devices will advertise as supported MCS-0 to MCS-9
        /// </summary>
        [Input("vhtSupportedMcs")]
        public Input<string>? VhtSupportedMcs { get; set; }

        public RatesState()
        {
        }
        public static new RatesState Empty => new RatesState();
    }
}
