# coding=utf-8
# *** WARNING: this file was generated by pulumi-language-python. ***
# *** Do not edit by hand unless you're certain you know what you are doing! ***

import builtins as _builtins
import warnings
import sys
import pulumi
import pulumi.runtime
from typing import Any, Mapping, Optional, Sequence, Union, overload
if sys.version_info >= (3, 11):
    from typing import NotRequired, TypedDict, TypeAlias
else:
    from typing_extensions import NotRequired, TypedDict, TypeAlias
from . import _utilities

__all__ = [
    'DevicePortOverrideArgs',
    'DevicePortOverrideArgsDict',
    'RadiusProfileAcctServerArgs',
    'RadiusProfileAcctServerArgsDict',
    'RadiusProfileAuthServerArgs',
    'RadiusProfileAuthServerArgsDict',
    'WlanScheduleArgs',
    'WlanScheduleArgsDict',
]

class DevicePortOverrideArgsDict(TypedDict):
    number: pulumi.Input[_builtins.int]
    """
    The physical port number on the switch to configure.
    """
    aggregate_num_ports: NotRequired[pulumi.Input[_builtins.int]]
    """
    The number of ports to include in a link aggregation group (LAG). Valid range: 2-8 ports. Used when:
    * Creating switch-to-switch uplinks for increased bandwidth
    * Setting up high-availability connections
    * Connecting to servers requiring more bandwidth
    Note: All ports in the LAG must be sequential and have matching configurations.
    """
    name: NotRequired[pulumi.Input[_builtins.str]]
    """
    A friendly name for the port that will be displayed in the UniFi controller UI. Examples:
      * 'Uplink to Core Switch'
      * 'Conference Room AP'
      * 'Server LACP Group 1'
      * 'VoIP Phone Port'
    """
    op_mode: NotRequired[pulumi.Input[_builtins.str]]
    """
    The operating mode of the port. Valid values are:
      * `switch` - Normal switching mode (default)
        - Standard port operation for connecting devices
        - Supports VLANs and all standard switching features
      * `mirror` - Port mirroring for traffic analysis
        - Copies traffic from other ports for monitoring
        - Useful for network troubleshooting and security
      * `aggregate` - Link aggregation/bonding mode
        - Combines multiple ports for increased bandwidth
        - Used for switch uplinks or high-bandwidth servers
    """
    poe_mode: NotRequired[pulumi.Input[_builtins.str]]
    """
    The Power over Ethernet (PoE) mode for the port. Valid values are:
    * `auto` - Automatically detect and power PoE devices (recommended)
      - Provides power based on device negotiation
      - Safest option for most PoE devices
    * `pasv24` - Passive 24V PoE
      - For older UniFi devices requiring passive 24V
      - Use with caution to avoid damage
    * `passthrough` - PoE passthrough mode
      - For daisy-chaining PoE devices
      - Available on select UniFi switches
    * `off` - Disable PoE on the port
      - For non-PoE devices
      - To prevent unwanted power delivery
    """
    port_profile_id: NotRequired[pulumi.Input[_builtins.str]]
    """
    The ID of a pre-configured port profile to apply to this port. Port profiles define settings like VLANs, PoE, and other port-specific configurations.
    """

@pulumi.input_type
class DevicePortOverrideArgs:
    def __init__(__self__, *,
                 number: pulumi.Input[_builtins.int],
                 aggregate_num_ports: Optional[pulumi.Input[_builtins.int]] = None,
                 name: Optional[pulumi.Input[_builtins.str]] = None,
                 op_mode: Optional[pulumi.Input[_builtins.str]] = None,
                 poe_mode: Optional[pulumi.Input[_builtins.str]] = None,
                 port_profile_id: Optional[pulumi.Input[_builtins.str]] = None):
        """
        :param pulumi.Input[_builtins.int] number: The physical port number on the switch to configure.
        :param pulumi.Input[_builtins.int] aggregate_num_ports: The number of ports to include in a link aggregation group (LAG). Valid range: 2-8 ports. Used when:
               * Creating switch-to-switch uplinks for increased bandwidth
               * Setting up high-availability connections
               * Connecting to servers requiring more bandwidth
               Note: All ports in the LAG must be sequential and have matching configurations.
        :param pulumi.Input[_builtins.str] name: A friendly name for the port that will be displayed in the UniFi controller UI. Examples:
                 * 'Uplink to Core Switch'
                 * 'Conference Room AP'
                 * 'Server LACP Group 1'
                 * 'VoIP Phone Port'
        :param pulumi.Input[_builtins.str] op_mode: The operating mode of the port. Valid values are:
                 * `switch` - Normal switching mode (default)
                   - Standard port operation for connecting devices
                   - Supports VLANs and all standard switching features
                 * `mirror` - Port mirroring for traffic analysis
                   - Copies traffic from other ports for monitoring
                   - Useful for network troubleshooting and security
                 * `aggregate` - Link aggregation/bonding mode
                   - Combines multiple ports for increased bandwidth
                   - Used for switch uplinks or high-bandwidth servers
        :param pulumi.Input[_builtins.str] poe_mode: The Power over Ethernet (PoE) mode for the port. Valid values are:
               * `auto` - Automatically detect and power PoE devices (recommended)
                 - Provides power based on device negotiation
                 - Safest option for most PoE devices
               * `pasv24` - Passive 24V PoE
                 - For older UniFi devices requiring passive 24V
                 - Use with caution to avoid damage
               * `passthrough` - PoE passthrough mode
                 - For daisy-chaining PoE devices
                 - Available on select UniFi switches
               * `off` - Disable PoE on the port
                 - For non-PoE devices
                 - To prevent unwanted power delivery
        :param pulumi.Input[_builtins.str] port_profile_id: The ID of a pre-configured port profile to apply to this port. Port profiles define settings like VLANs, PoE, and other port-specific configurations.
        """
        pulumi.set(__self__, "number", number)
        if aggregate_num_ports is not None:
            pulumi.set(__self__, "aggregate_num_ports", aggregate_num_ports)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if op_mode is not None:
            pulumi.set(__self__, "op_mode", op_mode)
        if poe_mode is not None:
            pulumi.set(__self__, "poe_mode", poe_mode)
        if port_profile_id is not None:
            pulumi.set(__self__, "port_profile_id", port_profile_id)

    @_builtins.property
    @pulumi.getter
    def number(self) -> pulumi.Input[_builtins.int]:
        """
        The physical port number on the switch to configure.
        """
        return pulumi.get(self, "number")

    @number.setter
    def number(self, value: pulumi.Input[_builtins.int]):
        pulumi.set(self, "number", value)

    @_builtins.property
    @pulumi.getter(name="aggregateNumPorts")
    def aggregate_num_ports(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        The number of ports to include in a link aggregation group (LAG). Valid range: 2-8 ports. Used when:
        * Creating switch-to-switch uplinks for increased bandwidth
        * Setting up high-availability connections
        * Connecting to servers requiring more bandwidth
        Note: All ports in the LAG must be sequential and have matching configurations.
        """
        return pulumi.get(self, "aggregate_num_ports")

    @aggregate_num_ports.setter
    def aggregate_num_ports(self, value: Optional[pulumi.Input[_builtins.int]]):
        pulumi.set(self, "aggregate_num_ports", value)

    @_builtins.property
    @pulumi.getter
    def name(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        A friendly name for the port that will be displayed in the UniFi controller UI. Examples:
          * 'Uplink to Core Switch'
          * 'Conference Room AP'
          * 'Server LACP Group 1'
          * 'VoIP Phone Port'
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "name", value)

    @_builtins.property
    @pulumi.getter(name="opMode")
    def op_mode(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The operating mode of the port. Valid values are:
          * `switch` - Normal switching mode (default)
            - Standard port operation for connecting devices
            - Supports VLANs and all standard switching features
          * `mirror` - Port mirroring for traffic analysis
            - Copies traffic from other ports for monitoring
            - Useful for network troubleshooting and security
          * `aggregate` - Link aggregation/bonding mode
            - Combines multiple ports for increased bandwidth
            - Used for switch uplinks or high-bandwidth servers
        """
        return pulumi.get(self, "op_mode")

    @op_mode.setter
    def op_mode(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "op_mode", value)

    @_builtins.property
    @pulumi.getter(name="poeMode")
    def poe_mode(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The Power over Ethernet (PoE) mode for the port. Valid values are:
        * `auto` - Automatically detect and power PoE devices (recommended)
          - Provides power based on device negotiation
          - Safest option for most PoE devices
        * `pasv24` - Passive 24V PoE
          - For older UniFi devices requiring passive 24V
          - Use with caution to avoid damage
        * `passthrough` - PoE passthrough mode
          - For daisy-chaining PoE devices
          - Available on select UniFi switches
        * `off` - Disable PoE on the port
          - For non-PoE devices
          - To prevent unwanted power delivery
        """
        return pulumi.get(self, "poe_mode")

    @poe_mode.setter
    def poe_mode(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "poe_mode", value)

    @_builtins.property
    @pulumi.getter(name="portProfileId")
    def port_profile_id(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The ID of a pre-configured port profile to apply to this port. Port profiles define settings like VLANs, PoE, and other port-specific configurations.
        """
        return pulumi.get(self, "port_profile_id")

    @port_profile_id.setter
    def port_profile_id(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "port_profile_id", value)


class RadiusProfileAcctServerArgsDict(TypedDict):
    ip: pulumi.Input[_builtins.str]
    """
    The IPv4 address of the RADIUS accounting server (e.g., '192.168.1.100'). Must be reachable from your UniFi network.
    """
    xsecret: pulumi.Input[_builtins.str]
    """
    The shared secret key used to secure communication between the UniFi controller and the RADIUS server. This must match the secret configured on your RADIUS server.
    """
    port: NotRequired[pulumi.Input[_builtins.int]]
    """
    The UDP port number where the RADIUS accounting service is listening. The standard port is 1813, but this can be changed if needed to match your server configuration.
    """

@pulumi.input_type
class RadiusProfileAcctServerArgs:
    def __init__(__self__, *,
                 ip: pulumi.Input[_builtins.str],
                 xsecret: pulumi.Input[_builtins.str],
                 port: Optional[pulumi.Input[_builtins.int]] = None):
        """
        :param pulumi.Input[_builtins.str] ip: The IPv4 address of the RADIUS accounting server (e.g., '192.168.1.100'). Must be reachable from your UniFi network.
        :param pulumi.Input[_builtins.str] xsecret: The shared secret key used to secure communication between the UniFi controller and the RADIUS server. This must match the secret configured on your RADIUS server.
        :param pulumi.Input[_builtins.int] port: The UDP port number where the RADIUS accounting service is listening. The standard port is 1813, but this can be changed if needed to match your server configuration.
        """
        pulumi.set(__self__, "ip", ip)
        pulumi.set(__self__, "xsecret", xsecret)
        if port is not None:
            pulumi.set(__self__, "port", port)

    @_builtins.property
    @pulumi.getter
    def ip(self) -> pulumi.Input[_builtins.str]:
        """
        The IPv4 address of the RADIUS accounting server (e.g., '192.168.1.100'). Must be reachable from your UniFi network.
        """
        return pulumi.get(self, "ip")

    @ip.setter
    def ip(self, value: pulumi.Input[_builtins.str]):
        pulumi.set(self, "ip", value)

    @_builtins.property
    @pulumi.getter
    def xsecret(self) -> pulumi.Input[_builtins.str]:
        """
        The shared secret key used to secure communication between the UniFi controller and the RADIUS server. This must match the secret configured on your RADIUS server.
        """
        return pulumi.get(self, "xsecret")

    @xsecret.setter
    def xsecret(self, value: pulumi.Input[_builtins.str]):
        pulumi.set(self, "xsecret", value)

    @_builtins.property
    @pulumi.getter
    def port(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        The UDP port number where the RADIUS accounting service is listening. The standard port is 1813, but this can be changed if needed to match your server configuration.
        """
        return pulumi.get(self, "port")

    @port.setter
    def port(self, value: Optional[pulumi.Input[_builtins.int]]):
        pulumi.set(self, "port", value)


class RadiusProfileAuthServerArgsDict(TypedDict):
    ip: pulumi.Input[_builtins.str]
    """
    The IPv4 address of the RADIUS authentication server (e.g., '192.168.1.100'). Must be reachable from your UniFi network.
    """
    xsecret: pulumi.Input[_builtins.str]
    """
    The shared secret key used to secure communication between the UniFi controller and the RADIUS server. This must match the secret configured on your RADIUS server.
    """
    port: NotRequired[pulumi.Input[_builtins.int]]
    """
    The UDP port number where the RADIUS authentication service is listening. The standard port is 1812, but this can be changed if needed to match your server configuration.
    """

@pulumi.input_type
class RadiusProfileAuthServerArgs:
    def __init__(__self__, *,
                 ip: pulumi.Input[_builtins.str],
                 xsecret: pulumi.Input[_builtins.str],
                 port: Optional[pulumi.Input[_builtins.int]] = None):
        """
        :param pulumi.Input[_builtins.str] ip: The IPv4 address of the RADIUS authentication server (e.g., '192.168.1.100'). Must be reachable from your UniFi network.
        :param pulumi.Input[_builtins.str] xsecret: The shared secret key used to secure communication between the UniFi controller and the RADIUS server. This must match the secret configured on your RADIUS server.
        :param pulumi.Input[_builtins.int] port: The UDP port number where the RADIUS authentication service is listening. The standard port is 1812, but this can be changed if needed to match your server configuration.
        """
        pulumi.set(__self__, "ip", ip)
        pulumi.set(__self__, "xsecret", xsecret)
        if port is not None:
            pulumi.set(__self__, "port", port)

    @_builtins.property
    @pulumi.getter
    def ip(self) -> pulumi.Input[_builtins.str]:
        """
        The IPv4 address of the RADIUS authentication server (e.g., '192.168.1.100'). Must be reachable from your UniFi network.
        """
        return pulumi.get(self, "ip")

    @ip.setter
    def ip(self, value: pulumi.Input[_builtins.str]):
        pulumi.set(self, "ip", value)

    @_builtins.property
    @pulumi.getter
    def xsecret(self) -> pulumi.Input[_builtins.str]:
        """
        The shared secret key used to secure communication between the UniFi controller and the RADIUS server. This must match the secret configured on your RADIUS server.
        """
        return pulumi.get(self, "xsecret")

    @xsecret.setter
    def xsecret(self, value: pulumi.Input[_builtins.str]):
        pulumi.set(self, "xsecret", value)

    @_builtins.property
    @pulumi.getter
    def port(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        The UDP port number where the RADIUS authentication service is listening. The standard port is 1812, but this can be changed if needed to match your server configuration.
        """
        return pulumi.get(self, "port")

    @port.setter
    def port(self, value: Optional[pulumi.Input[_builtins.int]]):
        pulumi.set(self, "port", value)


class WlanScheduleArgsDict(TypedDict):
    day_of_week: pulumi.Input[_builtins.str]
    """
    Day of week. Valid values: `sun`, `mon`, `tue`, `wed`, `thu`, `fri`, `sat`.
    """
    duration: pulumi.Input[_builtins.int]
    """
    Duration in minutes that the network should remain active.
    """
    start_hour: pulumi.Input[_builtins.int]
    """
    Start hour in 24-hour format (0-23).
    """
    name: NotRequired[pulumi.Input[_builtins.str]]
    """
    Friendly name for this schedule block (e.g., 'Business Hours', 'Weekend Access').
    """
    start_minute: NotRequired[pulumi.Input[_builtins.int]]
    """
    Start minute (0-59).
    """

@pulumi.input_type
class WlanScheduleArgs:
    def __init__(__self__, *,
                 day_of_week: pulumi.Input[_builtins.str],
                 duration: pulumi.Input[_builtins.int],
                 start_hour: pulumi.Input[_builtins.int],
                 name: Optional[pulumi.Input[_builtins.str]] = None,
                 start_minute: Optional[pulumi.Input[_builtins.int]] = None):
        """
        :param pulumi.Input[_builtins.str] day_of_week: Day of week. Valid values: `sun`, `mon`, `tue`, `wed`, `thu`, `fri`, `sat`.
        :param pulumi.Input[_builtins.int] duration: Duration in minutes that the network should remain active.
        :param pulumi.Input[_builtins.int] start_hour: Start hour in 24-hour format (0-23).
        :param pulumi.Input[_builtins.str] name: Friendly name for this schedule block (e.g., 'Business Hours', 'Weekend Access').
        :param pulumi.Input[_builtins.int] start_minute: Start minute (0-59).
        """
        pulumi.set(__self__, "day_of_week", day_of_week)
        pulumi.set(__self__, "duration", duration)
        pulumi.set(__self__, "start_hour", start_hour)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if start_minute is not None:
            pulumi.set(__self__, "start_minute", start_minute)

    @_builtins.property
    @pulumi.getter(name="dayOfWeek")
    def day_of_week(self) -> pulumi.Input[_builtins.str]:
        """
        Day of week. Valid values: `sun`, `mon`, `tue`, `wed`, `thu`, `fri`, `sat`.
        """
        return pulumi.get(self, "day_of_week")

    @day_of_week.setter
    def day_of_week(self, value: pulumi.Input[_builtins.str]):
        pulumi.set(self, "day_of_week", value)

    @_builtins.property
    @pulumi.getter
    def duration(self) -> pulumi.Input[_builtins.int]:
        """
        Duration in minutes that the network should remain active.
        """
        return pulumi.get(self, "duration")

    @duration.setter
    def duration(self, value: pulumi.Input[_builtins.int]):
        pulumi.set(self, "duration", value)

    @_builtins.property
    @pulumi.getter(name="startHour")
    def start_hour(self) -> pulumi.Input[_builtins.int]:
        """
        Start hour in 24-hour format (0-23).
        """
        return pulumi.get(self, "start_hour")

    @start_hour.setter
    def start_hour(self, value: pulumi.Input[_builtins.int]):
        pulumi.set(self, "start_hour", value)

    @_builtins.property
    @pulumi.getter
    def name(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Friendly name for this schedule block (e.g., 'Business Hours', 'Weekend Access').
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "name", value)

    @_builtins.property
    @pulumi.getter(name="startMinute")
    def start_minute(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        Start minute (0-59).
        """
        return pulumi.get(self, "start_minute")

    @start_minute.setter
    def start_minute(self, value: Optional[pulumi.Input[_builtins.int]]):
        pulumi.set(self, "start_minute", value)


