<gh_stars>0// *** 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 zscaler.PulumiPackage.Zia.LocationManagement
{
    /// <summary>
    /// The **zia_location_management** resource allows the creation and management of ZIA locations in the Zscaler Internet Access. This resource can then be associated with a:
    /// 
    /// * Static IP resource
    /// * GRE Tunnel resource
    /// * VPN credentials resource
    /// * URL filtering and firewall filtering rules
    /// 
    /// ## Example Usage
    /// 
    /// ```csharp
    /// using System.Collections.Generic;
    /// using Pulumi;
    /// using Zia = zscaler.PulumiPackage.Zia;
    /// 
    /// return await Deployment.RunAsync(() =&gt; 
    /// {
    ///     var usaSjc37TrafficForwardingVPNCredentials = new Zia.TrafficForwarding.TrafficForwardingVPNCredentials("usaSjc37TrafficForwardingVPNCredentials", new()
    ///     {
    ///         Type = "UFQDN",
    ///         Fqdn = "dycjh@example.com",
    ///         Comments = "USA - San Jose IPSec Tunnel",
    ///         PreSharedKey = "P@ass0rd123!",
    ///     });
    /// 
    ///     var usaSjc37TrafficForwardingStaticIP = new Zia.TrafficForwarding.TrafficForwardingStaticIP("usaSjc37TrafficForwardingStaticIP", new()
    ///     {
    ///         IpAddress = "1.1.1.1",
    ///         RoutableIp = true,
    ///         Comment = "SJC37 - Static IP",
    ///         GeoOverride = false,
    ///     });
    /// 
    ///     // ZIA Location Management
    ///     var usaSjc37LocationManagement = new Zia.LocationManagement.LocationManagement("usaSjc37LocationManagement", new()
    ///     {
    ///         Description = "Created with Terraform",
    ///         Country = "UNITED_STATES",
    ///         Tz = "UNITED_STATES_AMERICA_LOS_ANGELES",
    ///         AuthRequired = true,
    ///         IdleTimeInMinutes = 720,
    ///         DisplayTimeUnit = "HOUR",
    ///         SurrogateIp = true,
    ///         XffForwardEnabled = true,
    ///         OfwEnabled = true,
    ///         IpsControl = true,
    ///         IpAddresses = new[]
    ///         {
    ///             usaSjc37TrafficForwardingStaticIP.IpAddress,
    ///         },
    ///         VpnCredentials = new[]
    ///         {
    ///             new Zia.LocationManagement.Inputs.LocationManagementVpnCredentialArgs
    ///             {
    ///                 Id = usaSjc37TrafficForwardingVPNCredentials.VpnCredentalId,
    ///                 Type = usaSjc37TrafficForwardingVPNCredentials.Type,
    ///             },
    ///         },
    ///     }, new CustomResourceOptions
    ///     {
    ///         DependsOn = new[]
    ///         {
    ///             usaSjc37TrafficForwardingVPNCredentials,
    ///             usaSjc37TrafficForwardingStaticIP,
    ///         },
    ///     });
    /// 
    /// });
    /// ```
    /// </summary>
    [ZiaResourceType("zia:LocationManagement/locationManagement:LocationManagement")]
    public partial class LocationManagement : global::Pulumi.CustomResource
    {
        /// <summary>
        /// For First Time AUP Behavior, Block Internet Access. When set, all internet access (including non-HTTP traffic) is disabled until the user accepts the AUP.
        /// </summary>
        [Output("aupBlockInternetUntilAccepted")]
        public Output<bool> AupBlockInternetUntilAccepted { get; private set; } = null!;

        /// <summary>
        /// Enable AUP. When set to true, AUP is enabled for the location.
        /// </summary>
        [Output("aupEnabled")]
        public Output<bool> AupEnabled { get; private set; } = null!;

        /// <summary>
        /// For First Time AUP Behavior, Force SSL Inspection. When set, Zscaler will force SSL Inspection in order to enforce AUP for HTTPS traffic.
        /// </summary>
        [Output("aupForceSslInspection")]
        public Output<bool> AupForceSslInspection { get; private set; } = null!;

        /// <summary>
        /// Custom AUP Frequency. Refresh time (in days) to re-validate the AUP.
        /// </summary>
        [Output("aupTimeoutInDays")]
        public Output<int?> AupTimeoutInDays { get; private set; } = null!;

        /// <summary>
        /// Enforce Authentication. Required when ports are enabled, IP Surrogate is enabled, or Kerberos Authentication is enabled.
        /// </summary>
        [Output("authRequired")]
        public Output<bool> AuthRequired { get; private set; } = null!;

        /// <summary>
        /// Enable Caution. When set to true, a caution notifcation is enabled for the location.
        /// </summary>
        [Output("cautionEnabled")]
        public Output<bool> CautionEnabled { get; private set; } = null!;

        /// <summary>
        /// Country
        /// </summary>
        [Output("country")]
        public Output<string> Country { get; private set; } = null!;

        /// <summary>
        /// Additional notes or information regarding the location or sub-location. The description cannot exceed 1024 characters.
        /// </summary>
        [Output("description")]
        public Output<string?> Description { get; private set; } = null!;

        /// <summary>
        /// Display Time Unit. The time unit to display for IP Surrogate idle time to disassociation.
        /// </summary>
        [Output("displayTimeUnit")]
        public Output<string?> DisplayTimeUnit { get; private set; } = null!;

        /// <summary>
        /// Download bandwidth in bytes. The value `0` implies no Bandwidth Control enforcement.
        /// </summary>
        [Output("dnBandwidth")]
        public Output<int?> DnBandwidth { get; private set; } = null!;

        /// <summary>
        /// Idle Time to Disassociation. The user mapping idle time (in minutes) is required if a Surrogate IP is enabled.
        /// </summary>
        [Output("idleTimeInMinutes")]
        public Output<int?> IdleTimeInMinutes { get; private set; } = null!;

        /// <summary>
        /// For locations: IP addresses of the egress points that are provisioned in the Zscaler Cloud. Each entry is a single IP address (e.g., `238.10.33.9`). For sub-locations: Egress, internal, or GRE tunnel IP addresses. Each entry is either a single IP address, CIDR (e.g., `10.10.33.0/24`), or range (e.g., `10.10.33.1-10.10.33.10`)). The value is required if `vpn_credentials` are not defined.
        /// </summary>
        [Output("ipAddresses")]
        public Output<ImmutableArray<string>> IpAddresses { get; private set; } = null!;

        /// <summary>
        /// Enable IPS Control. When set to true, IPS Control is enabled for the location if Firewall is enabled.
        /// </summary>
        [Output("ipsControl")]
        public Output<bool> IpsControl { get; private set; } = null!;

        [Output("locationId")]
        public Output<int> LocationId { get; private set; } = null!;

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

        /// <summary>
        /// Enable Firewall. When set to true, Firewall is enabled for the location.
        /// </summary>
        [Output("ofwEnabled")]
        public Output<bool> OfwEnabled { get; private set; } = null!;

        /// <summary>
        /// Parent Location ID. If this ID does not exist or is `0`, it is implied that it is a parent location. Otherwise, it is a sub-location whose parent has this ID. x-applicableTo: `SUB`
        /// </summary>
        [Output("parentId")]
        public Output<int?> ParentId { get; private set; } = null!;

        /// <summary>
        /// IP ports that are associated with the location.
        /// </summary>
        [Output("ports")]
        public Output<string?> Ports { get; private set; } = null!;

        /// <summary>
        /// Profile tag that specifies the location traffic type. If not specified, this tag defaults to `Unassigned`. The supported options are: `NONE`, `CORPORATE`, `SERVER`, `GUESTWIFI`, `IOT`.
        /// </summary>
        [Output("profile")]
        public Output<string> Profile { get; private set; } = null!;

        /// <summary>
        /// This parameter was deprecated and no longer has an effect on SSL policy. It remains supported in the API payload in order to maintain backwards compatibility with existing scripts, but it will be removed in future.
        /// </summary>
        [Output("sslScanEnabled")]
        public Output<bool> SslScanEnabled { get; private set; } = null!;

        /// <summary>
        /// Enable Surrogate IP. When set to true, users are mapped to internal device IP addresses.
        /// </summary>
        [Output("surrogateIp")]
        public Output<bool> SurrogateIp { get; private set; } = null!;

        /// <summary>
        /// Enforce Surrogate IP for Known Browsers. When set to true, IP Surrogate is enforced for all known browsers.
        /// </summary>
        [Output("surrogateIpEnforcedForKnownBrowsers")]
        public Output<bool> SurrogateIpEnforcedForKnownBrowsers { get; private set; } = null!;

        /// <summary>
        /// Refresh Time for re-validation of Surrogacy. The surrogate refresh time (in minutes) to re-validate the IP surrogates.
        /// </summary>
        [Output("surrogateRefreshTimeInMinutes")]
        public Output<int?> SurrogateRefreshTimeInMinutes { get; private set; } = null!;

        /// <summary>
        /// Display Refresh Time Unit. The time unit to display for refresh time for re-validation of surrogacy.
        /// </summary>
        [Output("surrogateRefreshTimeUnit")]
        public Output<string?> SurrogateRefreshTimeUnit { get; private set; } = null!;

        /// <summary>
        /// Timezone of the location. If not specified, it defaults to GMT.
        /// </summary>
        [Output("tz")]
        public Output<string> Tz { get; private set; } = null!;

        /// <summary>
        /// Upload bandwidth in bytes. The value `0` implies no Bandwidth Control enforcement.
        /// </summary>
        [Output("upBandwidth")]
        public Output<int?> UpBandwidth { get; private set; } = null!;

        [Output("vpnCredentials")]
        public Output<ImmutableArray<Outputs.LocationManagementVpnCredential>> VpnCredentials { get; private set; } = null!;

        /// <summary>
        /// Enable XFF Forwarding. When set to true, traffic is passed to Zscaler Cloud via the X-Forwarded-For (XFF) header.
        /// </summary>
        [Output("xffForwardEnabled")]
        public Output<bool> XffForwardEnabled { get; private set; } = null!;

        /// <summary>
        /// This parameter was deprecated and no longer has an effect on SSL policy. It remains supported in the API payload in order to maintain backwards compatibility with existing scripts, but it will be removed in future.
        /// </summary>
        [Output("zappSslScanEnabled")]
        public Output<bool> ZappSslScanEnabled { get; private set; } = null!;


        /// <summary>
        /// Create a LocationManagement 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 LocationManagement(string name, LocationManagementArgs? args = null, CustomResourceOptions? options = null)
            : base("zia:LocationManagement/locationManagement:LocationManagement", name, args ?? new LocationManagementArgs(), MakeResourceOptions(options, ""))
        {
        }

        private LocationManagement(string name, Input<string> id, LocationManagementState? state = null, CustomResourceOptions? options = null)
            : base("zia:LocationManagement/locationManagement:LocationManagement", 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/zscaler",
            };
            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 LocationManagement 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 LocationManagement Get(string name, Input<string> id, LocationManagementState? state = null, CustomResourceOptions? options = null)
        {
            return new LocationManagement(name, id, state, options);
        }
    }

    public sealed class LocationManagementArgs : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// For First Time AUP Behavior, Block Internet Access. When set, all internet access (including non-HTTP traffic) is disabled until the user accepts the AUP.
        /// </summary>
        [Input("aupBlockInternetUntilAccepted")]
        public Input<bool>? AupBlockInternetUntilAccepted { get; set; }

        /// <summary>
        /// Enable AUP. When set to true, AUP is enabled for the location.
        /// </summary>
        [Input("aupEnabled")]
        public Input<bool>? AupEnabled { get; set; }

        /// <summary>
        /// For First Time AUP Behavior, Force SSL Inspection. When set, Zscaler will force SSL Inspection in order to enforce AUP for HTTPS traffic.
        /// </summary>
        [Input("aupForceSslInspection")]
        public Input<bool>? AupForceSslInspection { get; set; }

        /// <summary>
        /// Custom AUP Frequency. Refresh time (in days) to re-validate the AUP.
        /// </summary>
        [Input("aupTimeoutInDays")]
        public Input<int>? AupTimeoutInDays { get; set; }

        /// <summary>
        /// Enforce Authentication. Required when ports are enabled, IP Surrogate is enabled, or Kerberos Authentication is enabled.
        /// </summary>
        [Input("authRequired")]
        public Input<bool>? AuthRequired { get; set; }

        /// <summary>
        /// Enable Caution. When set to true, a caution notifcation is enabled for the location.
        /// </summary>
        [Input("cautionEnabled")]
        public Input<bool>? CautionEnabled { get; set; }

        /// <summary>
        /// Country
        /// </summary>
        [Input("country")]
        public Input<string>? Country { get; set; }

        /// <summary>
        /// Additional notes or information regarding the location or sub-location. The description cannot exceed 1024 characters.
        /// </summary>
        [Input("description")]
        public Input<string>? Description { get; set; }

        /// <summary>
        /// Display Time Unit. The time unit to display for IP Surrogate idle time to disassociation.
        /// </summary>
        [Input("displayTimeUnit")]
        public Input<string>? DisplayTimeUnit { get; set; }

        /// <summary>
        /// Download bandwidth in bytes. The value `0` implies no Bandwidth Control enforcement.
        /// </summary>
        [Input("dnBandwidth")]
        public Input<int>? DnBandwidth { get; set; }

        /// <summary>
        /// Idle Time to Disassociation. The user mapping idle time (in minutes) is required if a Surrogate IP is enabled.
        /// </summary>
        [Input("idleTimeInMinutes")]
        public Input<int>? IdleTimeInMinutes { get; set; }

        [Input("ipAddresses")]
        private InputList<string>? _ipAddresses;

        /// <summary>
        /// For locations: IP addresses of the egress points that are provisioned in the Zscaler Cloud. Each entry is a single IP address (e.g., `238.10.33.9`). For sub-locations: Egress, internal, or GRE tunnel IP addresses. Each entry is either a single IP address, CIDR (e.g., `10.10.33.0/24`), or range (e.g., `10.10.33.1-10.10.33.10`)). The value is required if `vpn_credentials` are not defined.
        /// </summary>
        public InputList<string> IpAddresses
        {
            get => _ipAddresses ?? (_ipAddresses = new InputList<string>());
            set => _ipAddresses = value;
        }

        /// <summary>
        /// Enable IPS Control. When set to true, IPS Control is enabled for the location if Firewall is enabled.
        /// </summary>
        [Input("ipsControl")]
        public Input<bool>? IpsControl { get; set; }

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

        /// <summary>
        /// Enable Firewall. When set to true, Firewall is enabled for the location.
        /// </summary>
        [Input("ofwEnabled")]
        public Input<bool>? OfwEnabled { get; set; }

        /// <summary>
        /// Parent Location ID. If this ID does not exist or is `0`, it is implied that it is a parent location. Otherwise, it is a sub-location whose parent has this ID. x-applicableTo: `SUB`
        /// </summary>
        [Input("parentId")]
        public Input<int>? ParentId { get; set; }

        /// <summary>
        /// IP ports that are associated with the location.
        /// </summary>
        [Input("ports")]
        public Input<string>? Ports { get; set; }

        /// <summary>
        /// Profile tag that specifies the location traffic type. If not specified, this tag defaults to `Unassigned`. The supported options are: `NONE`, `CORPORATE`, `SERVER`, `GUESTWIFI`, `IOT`.
        /// </summary>
        [Input("profile")]
        public Input<string>? Profile { get; set; }

        /// <summary>
        /// This parameter was deprecated and no longer has an effect on SSL policy. It remains supported in the API payload in order to maintain backwards compatibility with existing scripts, but it will be removed in future.
        /// </summary>
        [Input("sslScanEnabled")]
        public Input<bool>? SslScanEnabled { get; set; }

        /// <summary>
        /// Enable Surrogate IP. When set to true, users are mapped to internal device IP addresses.
        /// </summary>
        [Input("surrogateIp")]
        public Input<bool>? SurrogateIp { get; set; }

        /// <summary>
        /// Enforce Surrogate IP for Known Browsers. When set to true, IP Surrogate is enforced for all known browsers.
        /// </summary>
        [Input("surrogateIpEnforcedForKnownBrowsers")]
        public Input<bool>? SurrogateIpEnforcedForKnownBrowsers { get; set; }

        /// <summary>
        /// Refresh Time for re-validation of Surrogacy. The surrogate refresh time (in minutes) to re-validate the IP surrogates.
        /// </summary>
        [Input("surrogateRefreshTimeInMinutes")]
        public Input<int>? SurrogateRefreshTimeInMinutes { get; set; }

        /// <summary>
        /// Display Refresh Time Unit. The time unit to display for refresh time for re-validation of surrogacy.
        /// </summary>
        [Input("surrogateRefreshTimeUnit")]
        public Input<string>? SurrogateRefreshTimeUnit { get; set; }

        /// <summary>
        /// Timezone of the location. If not specified, it defaults to GMT.
        /// </summary>
        [Input("tz")]
        public Input<string>? Tz { get; set; }

        /// <summary>
        /// Upload bandwidth in bytes. The value `0` implies no Bandwidth Control enforcement.
        /// </summary>
        [Input("upBandwidth")]
        public Input<int>? UpBandwidth { get; set; }

        [Input("vpnCredentials")]
        private InputList<Inputs.LocationManagementVpnCredentialArgs>? _vpnCredentials;
        public InputList<Inputs.LocationManagementVpnCredentialArgs> VpnCredentials
        {
            get => _vpnCredentials ?? (_vpnCredentials = new InputList<Inputs.LocationManagementVpnCredentialArgs>());
            set => _vpnCredentials = value;
        }

        /// <summary>
        /// Enable XFF Forwarding. When set to true, traffic is passed to Zscaler Cloud via the X-Forwarded-For (XFF) header.
        /// </summary>
        [Input("xffForwardEnabled")]
        public Input<bool>? XffForwardEnabled { get; set; }

        /// <summary>
        /// This parameter was deprecated and no longer has an effect on SSL policy. It remains supported in the API payload in order to maintain backwards compatibility with existing scripts, but it will be removed in future.
        /// </summary>
        [Input("zappSslScanEnabled")]
        public Input<bool>? ZappSslScanEnabled { get; set; }

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

    public sealed class LocationManagementState : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// For First Time AUP Behavior, Block Internet Access. When set, all internet access (including non-HTTP traffic) is disabled until the user accepts the AUP.
        /// </summary>
        [Input("aupBlockInternetUntilAccepted")]
        public Input<bool>? AupBlockInternetUntilAccepted { get; set; }

        /// <summary>
        /// Enable AUP. When set to true, AUP is enabled for the location.
        /// </summary>
        [Input("aupEnabled")]
        public Input<bool>? AupEnabled { get; set; }

        /// <summary>
        /// For First Time AUP Behavior, Force SSL Inspection. When set, Zscaler will force SSL Inspection in order to enforce AUP for HTTPS traffic.
        /// </summary>
        [Input("aupForceSslInspection")]
        public Input<bool>? AupForceSslInspection { get; set; }

        /// <summary>
        /// Custom AUP Frequency. Refresh time (in days) to re-validate the AUP.
        /// </summary>
        [Input("aupTimeoutInDays")]
        public Input<int>? AupTimeoutInDays { get; set; }

        /// <summary>
        /// Enforce Authentication. Required when ports are enabled, IP Surrogate is enabled, or Kerberos Authentication is enabled.
        /// </summary>
        [Input("authRequired")]
        public Input<bool>? AuthRequired { get; set; }

        /// <summary>
        /// Enable Caution. When set to true, a caution notifcation is enabled for the location.
        /// </summary>
        [Input("cautionEnabled")]
        public Input<bool>? CautionEnabled { get; set; }

        /// <summary>
        /// Country
        /// </summary>
        [Input("country")]
        public Input<string>? Country { get; set; }

        /// <summary>
        /// Additional notes or information regarding the location or sub-location. The description cannot exceed 1024 characters.
        /// </summary>
        [Input("description")]
        public Input<string>? Description { get; set; }

        /// <summary>
        /// Display Time Unit. The time unit to display for IP Surrogate idle time to disassociation.
        /// </summary>
        [Input("displayTimeUnit")]
        public Input<string>? DisplayTimeUnit { get; set; }

        /// <summary>
        /// Download bandwidth in bytes. The value `0` implies no Bandwidth Control enforcement.
        /// </summary>
        [Input("dnBandwidth")]
        public Input<int>? DnBandwidth { get; set; }

        /// <summary>
        /// Idle Time to Disassociation. The user mapping idle time (in minutes) is required if a Surrogate IP is enabled.
        /// </summary>
        [Input("idleTimeInMinutes")]
        public Input<int>? IdleTimeInMinutes { get; set; }

        [Input("ipAddresses")]
        private InputList<string>? _ipAddresses;

        /// <summary>
        /// For locations: IP addresses of the egress points that are provisioned in the Zscaler Cloud. Each entry is a single IP address (e.g., `238.10.33.9`). For sub-locations: Egress, internal, or GRE tunnel IP addresses. Each entry is either a single IP address, CIDR (e.g., `10.10.33.0/24`), or range (e.g., `10.10.33.1-10.10.33.10`)). The value is required if `vpn_credentials` are not defined.
        /// </summary>
        public InputList<string> IpAddresses
        {
            get => _ipAddresses ?? (_ipAddresses = new InputList<string>());
            set => _ipAddresses = value;
        }

        /// <summary>
        /// Enable IPS Control. When set to true, IPS Control is enabled for the location if Firewall is enabled.
        /// </summary>
        [Input("ipsControl")]
        public Input<bool>? IpsControl { get; set; }

        [Input("locationId")]
        public Input<int>? LocationId { get; set; }

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

        /// <summary>
        /// Enable Firewall. When set to true, Firewall is enabled for the location.
        /// </summary>
        [Input("ofwEnabled")]
        public Input<bool>? OfwEnabled { get; set; }

        /// <summary>
        /// Parent Location ID. If this ID does not exist or is `0`, it is implied that it is a parent location. Otherwise, it is a sub-location whose parent has this ID. x-applicableTo: `SUB`
        /// </summary>
        [Input("parentId")]
        public Input<int>? ParentId { get; set; }

        /// <summary>
        /// IP ports that are associated with the location.
        /// </summary>
        [Input("ports")]
        public Input<string>? Ports { get; set; }

        /// <summary>
        /// Profile tag that specifies the location traffic type. If not specified, this tag defaults to `Unassigned`. The supported options are: `NONE`, `CORPORATE`, `SERVER`, `GUESTWIFI`, `IOT`.
        /// </summary>
        [Input("profile")]
        public Input<string>? Profile { get; set; }

        /// <summary>
        /// This parameter was deprecated and no longer has an effect on SSL policy. It remains supported in the API payload in order to maintain backwards compatibility with existing scripts, but it will be removed in future.
        /// </summary>
        [Input("sslScanEnabled")]
        public Input<bool>? SslScanEnabled { get; set; }

        /// <summary>
        /// Enable Surrogate IP. When set to true, users are mapped to internal device IP addresses.
        /// </summary>
        [Input("surrogateIp")]
        public Input<bool>? SurrogateIp { get; set; }

        /// <summary>
        /// Enforce Surrogate IP for Known Browsers. When set to true, IP Surrogate is enforced for all known browsers.
        /// </summary>
        [Input("surrogateIpEnforcedForKnownBrowsers")]
        public Input<bool>? SurrogateIpEnforcedForKnownBrowsers { get; set; }

        /// <summary>
        /// Refresh Time for re-validation of Surrogacy. The surrogate refresh time (in minutes) to re-validate the IP surrogates.
        /// </summary>
        [Input("surrogateRefreshTimeInMinutes")]
        public Input<int>? SurrogateRefreshTimeInMinutes { get; set; }

        /// <summary>
        /// Display Refresh Time Unit. The time unit to display for refresh time for re-validation of surrogacy.
        /// </summary>
        [Input("surrogateRefreshTimeUnit")]
        public Input<string>? SurrogateRefreshTimeUnit { get; set; }

        /// <summary>
        /// Timezone of the location. If not specified, it defaults to GMT.
        /// </summary>
        [Input("tz")]
        public Input<string>? Tz { get; set; }

        /// <summary>
        /// Upload bandwidth in bytes. The value `0` implies no Bandwidth Control enforcement.
        /// </summary>
        [Input("upBandwidth")]
        public Input<int>? UpBandwidth { get; set; }

        [Input("vpnCredentials")]
        private InputList<Inputs.LocationManagementVpnCredentialGetArgs>? _vpnCredentials;
        public InputList<Inputs.LocationManagementVpnCredentialGetArgs> VpnCredentials
        {
            get => _vpnCredentials ?? (_vpnCredentials = new InputList<Inputs.LocationManagementVpnCredentialGetArgs>());
            set => _vpnCredentials = value;
        }

        /// <summary>
        /// Enable XFF Forwarding. When set to true, traffic is passed to Zscaler Cloud via the X-Forwarded-For (XFF) header.
        /// </summary>
        [Input("xffForwardEnabled")]
        public Input<bool>? XffForwardEnabled { get; set; }

        /// <summary>
        /// This parameter was deprecated and no longer has an effect on SSL policy. It remains supported in the API payload in order to maintain backwards compatibility with existing scripts, but it will be removed in future.
        /// </summary>
        [Input("zappSslScanEnabled")]
        public Input<bool>? ZappSslScanEnabled { get; set; }

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