// *** 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 Pulumiverse.Fortios
{
    /// <summary>
    /// Configure WiFi Automatic Radio Resource Provisioning (ARRP) profiles. Applies to FortiOS Version `&gt;= 6.4.2`.
    /// 
    /// ## Import
    /// 
    /// WirelessController ArrpProfile can be imported using any of these accepted formats
    /// 
    /// ```sh
    ///  $ pulumi import fortios:index/wirelesscontrollerArrpprofile:WirelesscontrollerArrpprofile labelname {{name}}
    /// ```
    /// 
    ///  If you do not want to import arguments of block$ export "FORTIOS_IMPORT_TABLE"="false"
    /// 
    /// ```sh
    ///  $ pulumi import fortios:index/wirelesscontrollerArrpprofile:WirelesscontrollerArrpprofile labelname {{name}}
    /// ```
    /// 
    ///  $ unset "FORTIOS_IMPORT_TABLE"
    /// </summary>
    [FortiosResourceType("fortios:index/wirelesscontrollerArrpprofile:WirelesscontrollerArrpprofile")]
    public partial class WirelesscontrollerArrpprofile : global::Pulumi.CustomResource
    {
        /// <summary>
        /// Comment.
        /// </summary>
        [Output("comment")]
        public Output<string?> Comment { get; private set; } = null!;

        /// <summary>
        /// Time for running Dynamic Automatic Radio Resource Provisioning (DARRP) optimizations (0 - 86400 sec, default = 86400, 0 = disable).
        /// </summary>
        [Output("darrpOptimize")]
        public Output<int> DarrpOptimize { get; private set; } = null!;

        /// <summary>
        /// Firewall schedules for DARRP running time. DARRP will run periodically based on darrp-optimize within the schedules. Separate multiple schedule names with a space. The structure of `darrp_optimize_schedules` block is documented below.
        /// </summary>
        [Output("darrpOptimizeSchedules")]
        public Output<ImmutableArray<Outputs.WirelesscontrollerArrpprofileDarrpOptimizeSchedule>> DarrpOptimizeSchedules { get; private set; } = null!;

        /// <summary>
        /// Sort sub-tables, please do not set this parameter when configuring static sub-tables. Options: [ false, true, natural, alphabetical ]. false: Default value, do not sort tables; true/natural: sort tables in natural order. For example: [ a10, a2 ] -&gt; [ a2, a10 ]; alphabetical: sort tables in alphabetical order. For example: [ a10, a2 ] -&gt; [ a10, a2 ].
        /// </summary>
        [Output("dynamicSortSubtable")]
        public Output<string?> DynamicSortSubtable { get; private set; } = null!;

        /// <summary>
        /// Enable/disable use of DFS channel in DARRP channel selection phase 1 (default = disable).
        /// </summary>
        [Output("includeDfsChannel")]
        public Output<string> IncludeDfsChannel { get; private set; } = null!;

        /// <summary>
        /// Enable/disable use of weather channel in DARRP channel selection phase 1 (default = disable).
        /// </summary>
        [Output("includeWeatherChannel")]
        public Output<string> IncludeWeatherChannel { get; private set; } = null!;

        /// <summary>
        /// Period in seconds to measure average transmit retries and receive errors (default = 300).
        /// </summary>
        [Output("monitorPeriod")]
        public Output<int> MonitorPeriod { get; private set; } = null!;

        /// <summary>
        /// WiFi ARRP profile name.
        /// </summary>
        [Output("name")]
        public Output<string> Name { get; private set; } = null!;

        /// <summary>
        /// Enable to override setting darrp-optimize and darrp-optimize-schedules (default = disable). Valid values: `enable`, `disable`.
        /// </summary>
        [Output("overrideDarrpOptimize")]
        public Output<string> OverrideDarrpOptimize { get; private set; } = null!;

        /// <summary>
        /// Period in seconds to measure average channel load, noise floor, spectral RSSI (default = 3600).
        /// </summary>
        [Output("selectionPeriod")]
        public Output<int> SelectionPeriod { get; private set; } = null!;

        /// <summary>
        /// Threshold to reject channel in DARRP channel selection phase 1 due to surrounding APs (0 - 500, default = 250).
        /// </summary>
        [Output("thresholdAp")]
        public Output<int> ThresholdAp { get; private set; } = null!;

        /// <summary>
        /// Threshold in percentage to reject channel in DARRP channel selection phase 1 due to channel load (0 - 100, default = 60).
        /// </summary>
        [Output("thresholdChannelLoad")]
        public Output<int> ThresholdChannelLoad { get; private set; } = null!;

        /// <summary>
        /// Threshold in dBm to reject channel in DARRP channel selection phase 1 due to noise floor (-95 to -20, default = -85).
        /// </summary>
        [Output("thresholdNoiseFloor")]
        public Output<string> ThresholdNoiseFloor { get; private set; } = null!;

        /// <summary>
        /// Threshold in percentage for receive errors to trigger channel reselection in DARRP monitor stage (0 - 100, default = 50).
        /// </summary>
        [Output("thresholdRxErrors")]
        public Output<int> ThresholdRxErrors { get; private set; } = null!;

        /// <summary>
        /// Threshold in dBm to reject channel in DARRP channel selection phase 1 due to spectral RSSI (-95 to -20, default = -65).
        /// </summary>
        [Output("thresholdSpectralRssi")]
        public Output<string> ThresholdSpectralRssi { get; private set; } = null!;

        /// <summary>
        /// Threshold in percentage for transmit retries to trigger channel reselection in DARRP monitor stage (0 - 1000, default = 300).
        /// </summary>
        [Output("thresholdTxRetries")]
        public Output<int> ThresholdTxRetries { get; private set; } = null!;

        /// <summary>
        /// Specifies the vdom to which the resource will be applied when the FortiGate unit is running in VDOM mode. Only one vdom can be specified. If you want to inherit the vdom configuration of the provider, please do not set this parameter.
        /// </summary>
        [Output("vdomparam")]
        public Output<string?> Vdomparam { get; private set; } = null!;

        /// <summary>
        /// Weight in DARRP channel score calculation for channel load (0 - 2000, default = 20).
        /// </summary>
        [Output("weightChannelLoad")]
        public Output<int> WeightChannelLoad { get; private set; } = null!;

        /// <summary>
        /// Weight in DARRP channel score calculation for DFS channel (0 - 2000, default = 500).
        /// </summary>
        [Output("weightDfsChannel")]
        public Output<int> WeightDfsChannel { get; private set; } = null!;

        /// <summary>
        /// Weight in DARRP channel score calculation for managed APs (0 - 2000, default = 50).
        /// </summary>
        [Output("weightManagedAp")]
        public Output<int> WeightManagedAp { get; private set; } = null!;

        /// <summary>
        /// Weight in DARRP channel score calculation for noise floor (0 - 2000, default = 40).
        /// </summary>
        [Output("weightNoiseFloor")]
        public Output<int> WeightNoiseFloor { get; private set; } = null!;

        /// <summary>
        /// Weight in DARRP channel score calculation for rogue APs (0 - 2000, default = 10).
        /// </summary>
        [Output("weightRogueAp")]
        public Output<int> WeightRogueAp { get; private set; } = null!;

        /// <summary>
        /// Weight in DARRP channel score calculation for spectral RSSI (0 - 2000, default = 40).
        /// </summary>
        [Output("weightSpectralRssi")]
        public Output<int> WeightSpectralRssi { get; private set; } = null!;

        /// <summary>
        /// Weight in DARRP channel score calculation for weather channel (0 - 2000, default = 1000).
        /// </summary>
        [Output("weightWeatherChannel")]
        public Output<int> WeightWeatherChannel { get; private set; } = null!;


        /// <summary>
        /// Create a WirelesscontrollerArrpprofile 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 WirelesscontrollerArrpprofile(string name, WirelesscontrollerArrpprofileArgs? args = null, CustomResourceOptions? options = null)
            : base("fortios:index/wirelesscontrollerArrpprofile:WirelesscontrollerArrpprofile", name, args ?? new WirelesscontrollerArrpprofileArgs(), MakeResourceOptions(options, ""))
        {
        }

        private WirelesscontrollerArrpprofile(string name, Input<string> id, WirelesscontrollerArrpprofileState? state = null, CustomResourceOptions? options = null)
            : base("fortios:index/wirelesscontrollerArrpprofile:WirelesscontrollerArrpprofile", 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/pulumiverse/pulumi-fortios",
            };
            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 WirelesscontrollerArrpprofile 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 WirelesscontrollerArrpprofile Get(string name, Input<string> id, WirelesscontrollerArrpprofileState? state = null, CustomResourceOptions? options = null)
        {
            return new WirelesscontrollerArrpprofile(name, id, state, options);
        }
    }

    public sealed class WirelesscontrollerArrpprofileArgs : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// Comment.
        /// </summary>
        [Input("comment")]
        public Input<string>? Comment { get; set; }

        /// <summary>
        /// Time for running Dynamic Automatic Radio Resource Provisioning (DARRP) optimizations (0 - 86400 sec, default = 86400, 0 = disable).
        /// </summary>
        [Input("darrpOptimize")]
        public Input<int>? DarrpOptimize { get; set; }

        [Input("darrpOptimizeSchedules")]
        private InputList<Inputs.WirelesscontrollerArrpprofileDarrpOptimizeScheduleArgs>? _darrpOptimizeSchedules;

        /// <summary>
        /// Firewall schedules for DARRP running time. DARRP will run periodically based on darrp-optimize within the schedules. Separate multiple schedule names with a space. The structure of `darrp_optimize_schedules` block is documented below.
        /// </summary>
        public InputList<Inputs.WirelesscontrollerArrpprofileDarrpOptimizeScheduleArgs> DarrpOptimizeSchedules
        {
            get => _darrpOptimizeSchedules ?? (_darrpOptimizeSchedules = new InputList<Inputs.WirelesscontrollerArrpprofileDarrpOptimizeScheduleArgs>());
            set => _darrpOptimizeSchedules = value;
        }

        /// <summary>
        /// Sort sub-tables, please do not set this parameter when configuring static sub-tables. Options: [ false, true, natural, alphabetical ]. false: Default value, do not sort tables; true/natural: sort tables in natural order. For example: [ a10, a2 ] -&gt; [ a2, a10 ]; alphabetical: sort tables in alphabetical order. For example: [ a10, a2 ] -&gt; [ a10, a2 ].
        /// </summary>
        [Input("dynamicSortSubtable")]
        public Input<string>? DynamicSortSubtable { get; set; }

        /// <summary>
        /// Enable/disable use of DFS channel in DARRP channel selection phase 1 (default = disable).
        /// </summary>
        [Input("includeDfsChannel")]
        public Input<string>? IncludeDfsChannel { get; set; }

        /// <summary>
        /// Enable/disable use of weather channel in DARRP channel selection phase 1 (default = disable).
        /// </summary>
        [Input("includeWeatherChannel")]
        public Input<string>? IncludeWeatherChannel { get; set; }

        /// <summary>
        /// Period in seconds to measure average transmit retries and receive errors (default = 300).
        /// </summary>
        [Input("monitorPeriod")]
        public Input<int>? MonitorPeriod { get; set; }

        /// <summary>
        /// WiFi ARRP profile name.
        /// </summary>
        [Input("name")]
        public Input<string>? Name { get; set; }

        /// <summary>
        /// Enable to override setting darrp-optimize and darrp-optimize-schedules (default = disable). Valid values: `enable`, `disable`.
        /// </summary>
        [Input("overrideDarrpOptimize")]
        public Input<string>? OverrideDarrpOptimize { get; set; }

        /// <summary>
        /// Period in seconds to measure average channel load, noise floor, spectral RSSI (default = 3600).
        /// </summary>
        [Input("selectionPeriod")]
        public Input<int>? SelectionPeriod { get; set; }

        /// <summary>
        /// Threshold to reject channel in DARRP channel selection phase 1 due to surrounding APs (0 - 500, default = 250).
        /// </summary>
        [Input("thresholdAp")]
        public Input<int>? ThresholdAp { get; set; }

        /// <summary>
        /// Threshold in percentage to reject channel in DARRP channel selection phase 1 due to channel load (0 - 100, default = 60).
        /// </summary>
        [Input("thresholdChannelLoad")]
        public Input<int>? ThresholdChannelLoad { get; set; }

        /// <summary>
        /// Threshold in dBm to reject channel in DARRP channel selection phase 1 due to noise floor (-95 to -20, default = -85).
        /// </summary>
        [Input("thresholdNoiseFloor")]
        public Input<string>? ThresholdNoiseFloor { get; set; }

        /// <summary>
        /// Threshold in percentage for receive errors to trigger channel reselection in DARRP monitor stage (0 - 100, default = 50).
        /// </summary>
        [Input("thresholdRxErrors")]
        public Input<int>? ThresholdRxErrors { get; set; }

        /// <summary>
        /// Threshold in dBm to reject channel in DARRP channel selection phase 1 due to spectral RSSI (-95 to -20, default = -65).
        /// </summary>
        [Input("thresholdSpectralRssi")]
        public Input<string>? ThresholdSpectralRssi { get; set; }

        /// <summary>
        /// Threshold in percentage for transmit retries to trigger channel reselection in DARRP monitor stage (0 - 1000, default = 300).
        /// </summary>
        [Input("thresholdTxRetries")]
        public Input<int>? ThresholdTxRetries { get; set; }

        /// <summary>
        /// Specifies the vdom to which the resource will be applied when the FortiGate unit is running in VDOM mode. Only one vdom can be specified. If you want to inherit the vdom configuration of the provider, please do not set this parameter.
        /// </summary>
        [Input("vdomparam")]
        public Input<string>? Vdomparam { get; set; }

        /// <summary>
        /// Weight in DARRP channel score calculation for channel load (0 - 2000, default = 20).
        /// </summary>
        [Input("weightChannelLoad")]
        public Input<int>? WeightChannelLoad { get; set; }

        /// <summary>
        /// Weight in DARRP channel score calculation for DFS channel (0 - 2000, default = 500).
        /// </summary>
        [Input("weightDfsChannel")]
        public Input<int>? WeightDfsChannel { get; set; }

        /// <summary>
        /// Weight in DARRP channel score calculation for managed APs (0 - 2000, default = 50).
        /// </summary>
        [Input("weightManagedAp")]
        public Input<int>? WeightManagedAp { get; set; }

        /// <summary>
        /// Weight in DARRP channel score calculation for noise floor (0 - 2000, default = 40).
        /// </summary>
        [Input("weightNoiseFloor")]
        public Input<int>? WeightNoiseFloor { get; set; }

        /// <summary>
        /// Weight in DARRP channel score calculation for rogue APs (0 - 2000, default = 10).
        /// </summary>
        [Input("weightRogueAp")]
        public Input<int>? WeightRogueAp { get; set; }

        /// <summary>
        /// Weight in DARRP channel score calculation for spectral RSSI (0 - 2000, default = 40).
        /// </summary>
        [Input("weightSpectralRssi")]
        public Input<int>? WeightSpectralRssi { get; set; }

        /// <summary>
        /// Weight in DARRP channel score calculation for weather channel (0 - 2000, default = 1000).
        /// </summary>
        [Input("weightWeatherChannel")]
        public Input<int>? WeightWeatherChannel { get; set; }

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

    public sealed class WirelesscontrollerArrpprofileState : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// Comment.
        /// </summary>
        [Input("comment")]
        public Input<string>? Comment { get; set; }

        /// <summary>
        /// Time for running Dynamic Automatic Radio Resource Provisioning (DARRP) optimizations (0 - 86400 sec, default = 86400, 0 = disable).
        /// </summary>
        [Input("darrpOptimize")]
        public Input<int>? DarrpOptimize { get; set; }

        [Input("darrpOptimizeSchedules")]
        private InputList<Inputs.WirelesscontrollerArrpprofileDarrpOptimizeScheduleGetArgs>? _darrpOptimizeSchedules;

        /// <summary>
        /// Firewall schedules for DARRP running time. DARRP will run periodically based on darrp-optimize within the schedules. Separate multiple schedule names with a space. The structure of `darrp_optimize_schedules` block is documented below.
        /// </summary>
        public InputList<Inputs.WirelesscontrollerArrpprofileDarrpOptimizeScheduleGetArgs> DarrpOptimizeSchedules
        {
            get => _darrpOptimizeSchedules ?? (_darrpOptimizeSchedules = new InputList<Inputs.WirelesscontrollerArrpprofileDarrpOptimizeScheduleGetArgs>());
            set => _darrpOptimizeSchedules = value;
        }

        /// <summary>
        /// Sort sub-tables, please do not set this parameter when configuring static sub-tables. Options: [ false, true, natural, alphabetical ]. false: Default value, do not sort tables; true/natural: sort tables in natural order. For example: [ a10, a2 ] -&gt; [ a2, a10 ]; alphabetical: sort tables in alphabetical order. For example: [ a10, a2 ] -&gt; [ a10, a2 ].
        /// </summary>
        [Input("dynamicSortSubtable")]
        public Input<string>? DynamicSortSubtable { get; set; }

        /// <summary>
        /// Enable/disable use of DFS channel in DARRP channel selection phase 1 (default = disable).
        /// </summary>
        [Input("includeDfsChannel")]
        public Input<string>? IncludeDfsChannel { get; set; }

        /// <summary>
        /// Enable/disable use of weather channel in DARRP channel selection phase 1 (default = disable).
        /// </summary>
        [Input("includeWeatherChannel")]
        public Input<string>? IncludeWeatherChannel { get; set; }

        /// <summary>
        /// Period in seconds to measure average transmit retries and receive errors (default = 300).
        /// </summary>
        [Input("monitorPeriod")]
        public Input<int>? MonitorPeriod { get; set; }

        /// <summary>
        /// WiFi ARRP profile name.
        /// </summary>
        [Input("name")]
        public Input<string>? Name { get; set; }

        /// <summary>
        /// Enable to override setting darrp-optimize and darrp-optimize-schedules (default = disable). Valid values: `enable`, `disable`.
        /// </summary>
        [Input("overrideDarrpOptimize")]
        public Input<string>? OverrideDarrpOptimize { get; set; }

        /// <summary>
        /// Period in seconds to measure average channel load, noise floor, spectral RSSI (default = 3600).
        /// </summary>
        [Input("selectionPeriod")]
        public Input<int>? SelectionPeriod { get; set; }

        /// <summary>
        /// Threshold to reject channel in DARRP channel selection phase 1 due to surrounding APs (0 - 500, default = 250).
        /// </summary>
        [Input("thresholdAp")]
        public Input<int>? ThresholdAp { get; set; }

        /// <summary>
        /// Threshold in percentage to reject channel in DARRP channel selection phase 1 due to channel load (0 - 100, default = 60).
        /// </summary>
        [Input("thresholdChannelLoad")]
        public Input<int>? ThresholdChannelLoad { get; set; }

        /// <summary>
        /// Threshold in dBm to reject channel in DARRP channel selection phase 1 due to noise floor (-95 to -20, default = -85).
        /// </summary>
        [Input("thresholdNoiseFloor")]
        public Input<string>? ThresholdNoiseFloor { get; set; }

        /// <summary>
        /// Threshold in percentage for receive errors to trigger channel reselection in DARRP monitor stage (0 - 100, default = 50).
        /// </summary>
        [Input("thresholdRxErrors")]
        public Input<int>? ThresholdRxErrors { get; set; }

        /// <summary>
        /// Threshold in dBm to reject channel in DARRP channel selection phase 1 due to spectral RSSI (-95 to -20, default = -65).
        /// </summary>
        [Input("thresholdSpectralRssi")]
        public Input<string>? ThresholdSpectralRssi { get; set; }

        /// <summary>
        /// Threshold in percentage for transmit retries to trigger channel reselection in DARRP monitor stage (0 - 1000, default = 300).
        /// </summary>
        [Input("thresholdTxRetries")]
        public Input<int>? ThresholdTxRetries { get; set; }

        /// <summary>
        /// Specifies the vdom to which the resource will be applied when the FortiGate unit is running in VDOM mode. Only one vdom can be specified. If you want to inherit the vdom configuration of the provider, please do not set this parameter.
        /// </summary>
        [Input("vdomparam")]
        public Input<string>? Vdomparam { get; set; }

        /// <summary>
        /// Weight in DARRP channel score calculation for channel load (0 - 2000, default = 20).
        /// </summary>
        [Input("weightChannelLoad")]
        public Input<int>? WeightChannelLoad { get; set; }

        /// <summary>
        /// Weight in DARRP channel score calculation for DFS channel (0 - 2000, default = 500).
        /// </summary>
        [Input("weightDfsChannel")]
        public Input<int>? WeightDfsChannel { get; set; }

        /// <summary>
        /// Weight in DARRP channel score calculation for managed APs (0 - 2000, default = 50).
        /// </summary>
        [Input("weightManagedAp")]
        public Input<int>? WeightManagedAp { get; set; }

        /// <summary>
        /// Weight in DARRP channel score calculation for noise floor (0 - 2000, default = 40).
        /// </summary>
        [Input("weightNoiseFloor")]
        public Input<int>? WeightNoiseFloor { get; set; }

        /// <summary>
        /// Weight in DARRP channel score calculation for rogue APs (0 - 2000, default = 10).
        /// </summary>
        [Input("weightRogueAp")]
        public Input<int>? WeightRogueAp { get; set; }

        /// <summary>
        /// Weight in DARRP channel score calculation for spectral RSSI (0 - 2000, default = 40).
        /// </summary>
        [Input("weightSpectralRssi")]
        public Input<int>? WeightSpectralRssi { get; set; }

        /// <summary>
        /// Weight in DARRP channel score calculation for weather channel (0 - 2000, default = 1000).
        /// </summary>
        [Input("weightWeatherChannel")]
        public Input<int>? WeightWeatherChannel { get; set; }

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