// *** 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>
    /// VDOM wireless controller configuration.
    /// 
    /// ## Import
    /// 
    /// WirelessController Setting can be imported using any of these accepted formats
    /// 
    /// ```sh
    ///  $ pulumi import fortios:index/wirelesscontrollerSetting:WirelesscontrollerSetting labelname WirelessControllerSetting
    /// ```
    /// 
    ///  If you do not want to import arguments of block$ export "FORTIOS_IMPORT_TABLE"="false"
    /// 
    /// ```sh
    ///  $ pulumi import fortios:index/wirelesscontrollerSetting:WirelesscontrollerSetting labelname WirelessControllerSetting
    /// ```
    /// 
    ///  $ unset "FORTIOS_IMPORT_TABLE"
    /// </summary>
    [FortiosResourceType("fortios:index/wirelesscontrollerSetting:WirelesscontrollerSetting")]
    public partial class WirelesscontrollerSetting : global::Pulumi.CustomResource
    {
        /// <summary>
        /// FortiCloud customer account ID.
        /// </summary>
        [Output("accountId")]
        public Output<string> AccountId { get; private set; } = null!;

        /// <summary>
        /// Country or region in which the FortiGate is located. The country determines the 802.11 bands and channels that are available.
        /// </summary>
        [Output("country")]
        public Output<string> Country { 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.WirelesscontrollerSettingDarrpOptimizeSchedule>> DarrpOptimizeSchedules { get; private set; } = null!;

        /// <summary>
        /// Lower limit of creation time of device for identification in minutes (0 - 60, default = 5).
        /// </summary>
        [Output("deviceHoldoff")]
        public Output<int> DeviceHoldoff { get; private set; } = null!;

        /// <summary>
        /// Upper limit of idle time of device for identification in minutes (0 - 14400, default = 1440).
        /// </summary>
        [Output("deviceIdle")]
        public Output<int> DeviceIdle { get; private set; } = null!;

        /// <summary>
        /// Upper limit of confidence of device for identification (0 - 255, default = 1, 0 = disable).
        /// </summary>
        [Output("deviceWeight")]
        public Output<int> DeviceWeight { get; private set; } = null!;

        /// <summary>
        /// Enable/disable allowing Virtual Access Points (VAPs) to use the same SSID name in the same VDOM. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("duplicateSsid")]
        public Output<string> DuplicateSsid { 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>
        /// Actions taken for detected fake SSID. Valid values: `log`, `suppress`.
        /// </summary>
        [Output("fakeSsidAction")]
        public Output<string> FakeSsidAction { get; private set; } = null!;

        /// <summary>
        /// Enable/disable FAP-C series compatibility. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("fapcCompatibility")]
        public Output<string> FapcCompatibility { get; private set; } = null!;

        /// <summary>
        /// Enable/disable automatic provisioning of latest firmware on authorization. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("firmwareProvisionOnAuthorization")]
        public Output<string> FirmwareProvisionOnAuthorization { get; private set; } = null!;

        /// <summary>
        /// Configure offending SSID. The structure of `offending_ssid` block is documented below.
        /// </summary>
        [Output("offendingSsids")]
        public Output<ImmutableArray<Outputs.WirelesscontrollerSettingOffendingSsid>> OffendingSsids { get; private set; } = null!;

        /// <summary>
        /// Enable/disable phishing SSID detection. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("phishingSsidDetect")]
        public Output<string> PhishingSsidDetect { 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>
        /// Enable/disable WFA compatibility. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("wfaCompatibility")]
        public Output<string> WfaCompatibility { get; private set; } = null!;


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

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

    public sealed class WirelesscontrollerSettingArgs : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// FortiCloud customer account ID.
        /// </summary>
        [Input("accountId")]
        public Input<string>? AccountId { get; set; }

        /// <summary>
        /// Country or region in which the FortiGate is located. The country determines the 802.11 bands and channels that are available.
        /// </summary>
        [Input("country")]
        public Input<string>? Country { 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.WirelesscontrollerSettingDarrpOptimizeScheduleArgs>? _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.WirelesscontrollerSettingDarrpOptimizeScheduleArgs> DarrpOptimizeSchedules
        {
            get => _darrpOptimizeSchedules ?? (_darrpOptimizeSchedules = new InputList<Inputs.WirelesscontrollerSettingDarrpOptimizeScheduleArgs>());
            set => _darrpOptimizeSchedules = value;
        }

        /// <summary>
        /// Lower limit of creation time of device for identification in minutes (0 - 60, default = 5).
        /// </summary>
        [Input("deviceHoldoff")]
        public Input<int>? DeviceHoldoff { get; set; }

        /// <summary>
        /// Upper limit of idle time of device for identification in minutes (0 - 14400, default = 1440).
        /// </summary>
        [Input("deviceIdle")]
        public Input<int>? DeviceIdle { get; set; }

        /// <summary>
        /// Upper limit of confidence of device for identification (0 - 255, default = 1, 0 = disable).
        /// </summary>
        [Input("deviceWeight")]
        public Input<int>? DeviceWeight { get; set; }

        /// <summary>
        /// Enable/disable allowing Virtual Access Points (VAPs) to use the same SSID name in the same VDOM. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("duplicateSsid")]
        public Input<string>? DuplicateSsid { get; set; }

        /// <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>
        /// Actions taken for detected fake SSID. Valid values: `log`, `suppress`.
        /// </summary>
        [Input("fakeSsidAction")]
        public Input<string>? FakeSsidAction { get; set; }

        /// <summary>
        /// Enable/disable FAP-C series compatibility. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("fapcCompatibility")]
        public Input<string>? FapcCompatibility { get; set; }

        /// <summary>
        /// Enable/disable automatic provisioning of latest firmware on authorization. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("firmwareProvisionOnAuthorization")]
        public Input<string>? FirmwareProvisionOnAuthorization { get; set; }

        [Input("offendingSsids")]
        private InputList<Inputs.WirelesscontrollerSettingOffendingSsidArgs>? _offendingSsids;

        /// <summary>
        /// Configure offending SSID. The structure of `offending_ssid` block is documented below.
        /// </summary>
        public InputList<Inputs.WirelesscontrollerSettingOffendingSsidArgs> OffendingSsids
        {
            get => _offendingSsids ?? (_offendingSsids = new InputList<Inputs.WirelesscontrollerSettingOffendingSsidArgs>());
            set => _offendingSsids = value;
        }

        /// <summary>
        /// Enable/disable phishing SSID detection. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("phishingSsidDetect")]
        public Input<string>? PhishingSsidDetect { 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>
        /// Enable/disable WFA compatibility. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("wfaCompatibility")]
        public Input<string>? WfaCompatibility { get; set; }

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

    public sealed class WirelesscontrollerSettingState : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// FortiCloud customer account ID.
        /// </summary>
        [Input("accountId")]
        public Input<string>? AccountId { get; set; }

        /// <summary>
        /// Country or region in which the FortiGate is located. The country determines the 802.11 bands and channels that are available.
        /// </summary>
        [Input("country")]
        public Input<string>? Country { 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.WirelesscontrollerSettingDarrpOptimizeScheduleGetArgs>? _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.WirelesscontrollerSettingDarrpOptimizeScheduleGetArgs> DarrpOptimizeSchedules
        {
            get => _darrpOptimizeSchedules ?? (_darrpOptimizeSchedules = new InputList<Inputs.WirelesscontrollerSettingDarrpOptimizeScheduleGetArgs>());
            set => _darrpOptimizeSchedules = value;
        }

        /// <summary>
        /// Lower limit of creation time of device for identification in minutes (0 - 60, default = 5).
        /// </summary>
        [Input("deviceHoldoff")]
        public Input<int>? DeviceHoldoff { get; set; }

        /// <summary>
        /// Upper limit of idle time of device for identification in minutes (0 - 14400, default = 1440).
        /// </summary>
        [Input("deviceIdle")]
        public Input<int>? DeviceIdle { get; set; }

        /// <summary>
        /// Upper limit of confidence of device for identification (0 - 255, default = 1, 0 = disable).
        /// </summary>
        [Input("deviceWeight")]
        public Input<int>? DeviceWeight { get; set; }

        /// <summary>
        /// Enable/disable allowing Virtual Access Points (VAPs) to use the same SSID name in the same VDOM. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("duplicateSsid")]
        public Input<string>? DuplicateSsid { get; set; }

        /// <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>
        /// Actions taken for detected fake SSID. Valid values: `log`, `suppress`.
        /// </summary>
        [Input("fakeSsidAction")]
        public Input<string>? FakeSsidAction { get; set; }

        /// <summary>
        /// Enable/disable FAP-C series compatibility. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("fapcCompatibility")]
        public Input<string>? FapcCompatibility { get; set; }

        /// <summary>
        /// Enable/disable automatic provisioning of latest firmware on authorization. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("firmwareProvisionOnAuthorization")]
        public Input<string>? FirmwareProvisionOnAuthorization { get; set; }

        [Input("offendingSsids")]
        private InputList<Inputs.WirelesscontrollerSettingOffendingSsidGetArgs>? _offendingSsids;

        /// <summary>
        /// Configure offending SSID. The structure of `offending_ssid` block is documented below.
        /// </summary>
        public InputList<Inputs.WirelesscontrollerSettingOffendingSsidGetArgs> OffendingSsids
        {
            get => _offendingSsids ?? (_offendingSsids = new InputList<Inputs.WirelesscontrollerSettingOffendingSsidGetArgs>());
            set => _offendingSsids = value;
        }

        /// <summary>
        /// Enable/disable phishing SSID detection. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("phishingSsidDetect")]
        public Input<string>? PhishingSsidDetect { 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>
        /// Enable/disable WFA compatibility. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("wfaCompatibility")]
        public Input<string>? WfaCompatibility { get; set; }

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