# 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__ = [
    'ZonePolicyDestination',
    'ZonePolicySchedule',
    'ZonePolicySource',
]

@pulumi.output_type
class ZonePolicyDestination(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "zoneId":
            suggest = "zone_id"
        elif key == "appCategoryIds":
            suggest = "app_category_ids"
        elif key == "appIds":
            suggest = "app_ids"
        elif key == "ipGroupId":
            suggest = "ip_group_id"
        elif key == "matchOppositeIps":
            suggest = "match_opposite_ips"
        elif key == "matchOppositePorts":
            suggest = "match_opposite_ports"
        elif key == "portGroupId":
            suggest = "port_group_id"
        elif key == "webDomains":
            suggest = "web_domains"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ZonePolicyDestination. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ZonePolicyDestination.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ZonePolicyDestination.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 zone_id: _builtins.str,
                 app_category_ids: Optional[Sequence[_builtins.str]] = None,
                 app_ids: Optional[Sequence[_builtins.str]] = None,
                 ip_group_id: Optional[_builtins.str] = None,
                 ips: Optional[Sequence[_builtins.str]] = None,
                 match_opposite_ips: Optional[_builtins.bool] = None,
                 match_opposite_ports: Optional[_builtins.bool] = None,
                 port: Optional[_builtins.int] = None,
                 port_group_id: Optional[_builtins.str] = None,
                 regions: Optional[Sequence[_builtins.str]] = None,
                 web_domains: Optional[Sequence[_builtins.str]] = None):
        """
        :param _builtins.str zone_id: ID of the firewall zone.
        :param Sequence[_builtins.str] app_category_ids: List of application category IDs.
        :param Sequence[_builtins.str] app_ids: List of application IDs.
        :param _builtins.str ip_group_id: ID of the source IP group.
        :param Sequence[_builtins.str] ips: List of source IPs.
        :param _builtins.bool match_opposite_ips: Whether to match opposite IPs.
        :param _builtins.bool match_opposite_ports: Whether to match opposite ports.
        :param _builtins.int port: Source port.
        :param _builtins.str port_group_id: ID of the source port group.
        :param Sequence[_builtins.str] regions: List of regions.
        :param Sequence[_builtins.str] web_domains: List of web domains.
        """
        pulumi.set(__self__, "zone_id", zone_id)
        if app_category_ids is not None:
            pulumi.set(__self__, "app_category_ids", app_category_ids)
        if app_ids is not None:
            pulumi.set(__self__, "app_ids", app_ids)
        if ip_group_id is not None:
            pulumi.set(__self__, "ip_group_id", ip_group_id)
        if ips is not None:
            pulumi.set(__self__, "ips", ips)
        if match_opposite_ips is not None:
            pulumi.set(__self__, "match_opposite_ips", match_opposite_ips)
        if match_opposite_ports is not None:
            pulumi.set(__self__, "match_opposite_ports", match_opposite_ports)
        if port is not None:
            pulumi.set(__self__, "port", port)
        if port_group_id is not None:
            pulumi.set(__self__, "port_group_id", port_group_id)
        if regions is not None:
            pulumi.set(__self__, "regions", regions)
        if web_domains is not None:
            pulumi.set(__self__, "web_domains", web_domains)

    @_builtins.property
    @pulumi.getter(name="zoneId")
    def zone_id(self) -> _builtins.str:
        """
        ID of the firewall zone.
        """
        return pulumi.get(self, "zone_id")

    @_builtins.property
    @pulumi.getter(name="appCategoryIds")
    def app_category_ids(self) -> Optional[Sequence[_builtins.str]]:
        """
        List of application category IDs.
        """
        return pulumi.get(self, "app_category_ids")

    @_builtins.property
    @pulumi.getter(name="appIds")
    def app_ids(self) -> Optional[Sequence[_builtins.str]]:
        """
        List of application IDs.
        """
        return pulumi.get(self, "app_ids")

    @_builtins.property
    @pulumi.getter(name="ipGroupId")
    def ip_group_id(self) -> Optional[_builtins.str]:
        """
        ID of the source IP group.
        """
        return pulumi.get(self, "ip_group_id")

    @_builtins.property
    @pulumi.getter
    def ips(self) -> Optional[Sequence[_builtins.str]]:
        """
        List of source IPs.
        """
        return pulumi.get(self, "ips")

    @_builtins.property
    @pulumi.getter(name="matchOppositeIps")
    def match_opposite_ips(self) -> Optional[_builtins.bool]:
        """
        Whether to match opposite IPs.
        """
        return pulumi.get(self, "match_opposite_ips")

    @_builtins.property
    @pulumi.getter(name="matchOppositePorts")
    def match_opposite_ports(self) -> Optional[_builtins.bool]:
        """
        Whether to match opposite ports.
        """
        return pulumi.get(self, "match_opposite_ports")

    @_builtins.property
    @pulumi.getter
    def port(self) -> Optional[_builtins.int]:
        """
        Source port.
        """
        return pulumi.get(self, "port")

    @_builtins.property
    @pulumi.getter(name="portGroupId")
    def port_group_id(self) -> Optional[_builtins.str]:
        """
        ID of the source port group.
        """
        return pulumi.get(self, "port_group_id")

    @_builtins.property
    @pulumi.getter
    def regions(self) -> Optional[Sequence[_builtins.str]]:
        """
        List of regions.
        """
        return pulumi.get(self, "regions")

    @_builtins.property
    @pulumi.getter(name="webDomains")
    def web_domains(self) -> Optional[Sequence[_builtins.str]]:
        """
        List of web domains.
        """
        return pulumi.get(self, "web_domains")


@pulumi.output_type
class ZonePolicySchedule(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "dateEnd":
            suggest = "date_end"
        elif key == "dateStart":
            suggest = "date_start"
        elif key == "repeatOnDays":
            suggest = "repeat_on_days"
        elif key == "timeAllDay":
            suggest = "time_all_day"
        elif key == "timeFrom":
            suggest = "time_from"
        elif key == "timeTo":
            suggest = "time_to"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ZonePolicySchedule. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ZonePolicySchedule.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ZonePolicySchedule.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 date: Optional[_builtins.str] = None,
                 date_end: Optional[_builtins.str] = None,
                 date_start: Optional[_builtins.str] = None,
                 mode: Optional[_builtins.str] = None,
                 repeat_on_days: Optional[Sequence[_builtins.str]] = None,
                 time_all_day: Optional[_builtins.bool] = None,
                 time_from: Optional[_builtins.str] = None,
                 time_to: Optional[_builtins.str] = None):
        """
        :param _builtins.str date: Date for the schedule.
        :param _builtins.str date_end: End date for the schedule.
        :param _builtins.str date_start: Start date for the schedule.
        :param _builtins.str mode: Schedule mode. Valid values are `ALWAYS`, `EVERY_DAY`, `EVERY_WEEK`, `ONE_TIME_ONLY`, or `CUSTOM`.
        :param Sequence[_builtins.str] repeat_on_days: Days of the week when schedule repeats. Valid values include `mon`, `tue`, `wed`, `thu`, `fri`, `sat`, and `sun`.
        :param _builtins.bool time_all_day: Whether the schedule applies all day.
        :param _builtins.str time_from: Schedule starting time in 24-hour format (HH:MM).
        :param _builtins.str time_to: Schedule ending time in 24-hour format (HH:MM).
        """
        if date is not None:
            pulumi.set(__self__, "date", date)
        if date_end is not None:
            pulumi.set(__self__, "date_end", date_end)
        if date_start is not None:
            pulumi.set(__self__, "date_start", date_start)
        if mode is not None:
            pulumi.set(__self__, "mode", mode)
        if repeat_on_days is not None:
            pulumi.set(__self__, "repeat_on_days", repeat_on_days)
        if time_all_day is not None:
            pulumi.set(__self__, "time_all_day", time_all_day)
        if time_from is not None:
            pulumi.set(__self__, "time_from", time_from)
        if time_to is not None:
            pulumi.set(__self__, "time_to", time_to)

    @_builtins.property
    @pulumi.getter
    def date(self) -> Optional[_builtins.str]:
        """
        Date for the schedule.
        """
        return pulumi.get(self, "date")

    @_builtins.property
    @pulumi.getter(name="dateEnd")
    def date_end(self) -> Optional[_builtins.str]:
        """
        End date for the schedule.
        """
        return pulumi.get(self, "date_end")

    @_builtins.property
    @pulumi.getter(name="dateStart")
    def date_start(self) -> Optional[_builtins.str]:
        """
        Start date for the schedule.
        """
        return pulumi.get(self, "date_start")

    @_builtins.property
    @pulumi.getter
    def mode(self) -> Optional[_builtins.str]:
        """
        Schedule mode. Valid values are `ALWAYS`, `EVERY_DAY`, `EVERY_WEEK`, `ONE_TIME_ONLY`, or `CUSTOM`.
        """
        return pulumi.get(self, "mode")

    @_builtins.property
    @pulumi.getter(name="repeatOnDays")
    def repeat_on_days(self) -> Optional[Sequence[_builtins.str]]:
        """
        Days of the week when schedule repeats. Valid values include `mon`, `tue`, `wed`, `thu`, `fri`, `sat`, and `sun`.
        """
        return pulumi.get(self, "repeat_on_days")

    @_builtins.property
    @pulumi.getter(name="timeAllDay")
    def time_all_day(self) -> Optional[_builtins.bool]:
        """
        Whether the schedule applies all day.
        """
        return pulumi.get(self, "time_all_day")

    @_builtins.property
    @pulumi.getter(name="timeFrom")
    def time_from(self) -> Optional[_builtins.str]:
        """
        Schedule starting time in 24-hour format (HH:MM).
        """
        return pulumi.get(self, "time_from")

    @_builtins.property
    @pulumi.getter(name="timeTo")
    def time_to(self) -> Optional[_builtins.str]:
        """
        Schedule ending time in 24-hour format (HH:MM).
        """
        return pulumi.get(self, "time_to")


@pulumi.output_type
class ZonePolicySource(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "zoneId":
            suggest = "zone_id"
        elif key == "clientMacs":
            suggest = "client_macs"
        elif key == "ipGroupId":
            suggest = "ip_group_id"
        elif key == "matchOppositeIps":
            suggest = "match_opposite_ips"
        elif key == "matchOppositeNetworks":
            suggest = "match_opposite_networks"
        elif key == "matchOppositePorts":
            suggest = "match_opposite_ports"
        elif key == "networkIds":
            suggest = "network_ids"
        elif key == "portGroupId":
            suggest = "port_group_id"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ZonePolicySource. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ZonePolicySource.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ZonePolicySource.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 zone_id: _builtins.str,
                 client_macs: Optional[Sequence[_builtins.str]] = None,
                 ip_group_id: Optional[_builtins.str] = None,
                 ips: Optional[Sequence[_builtins.str]] = None,
                 mac: Optional[_builtins.str] = None,
                 macs: Optional[Sequence[_builtins.str]] = None,
                 match_opposite_ips: Optional[_builtins.bool] = None,
                 match_opposite_networks: Optional[_builtins.bool] = None,
                 match_opposite_ports: Optional[_builtins.bool] = None,
                 network_ids: Optional[Sequence[_builtins.str]] = None,
                 port: Optional[_builtins.int] = None,
                 port_group_id: Optional[_builtins.str] = None):
        """
        :param _builtins.str zone_id: ID of the firewall zone.
        :param Sequence[_builtins.str] client_macs: List of client MAC addresses.
        :param _builtins.str ip_group_id: ID of the source IP group.
        :param Sequence[_builtins.str] ips: List of source IPs.
        :param _builtins.str mac: Source MAC address.
        :param Sequence[_builtins.str] macs: List of MAC addresses.
        :param _builtins.bool match_opposite_ips: Whether to match opposite IPs.
        :param _builtins.bool match_opposite_networks: Whether to match opposite networks.
        :param _builtins.bool match_opposite_ports: Whether to match opposite ports.
        :param Sequence[_builtins.str] network_ids: List of network IDs.
        :param _builtins.int port: Source port.
        :param _builtins.str port_group_id: ID of the source port group.
        """
        pulumi.set(__self__, "zone_id", zone_id)
        if client_macs is not None:
            pulumi.set(__self__, "client_macs", client_macs)
        if ip_group_id is not None:
            pulumi.set(__self__, "ip_group_id", ip_group_id)
        if ips is not None:
            pulumi.set(__self__, "ips", ips)
        if mac is not None:
            pulumi.set(__self__, "mac", mac)
        if macs is not None:
            pulumi.set(__self__, "macs", macs)
        if match_opposite_ips is not None:
            pulumi.set(__self__, "match_opposite_ips", match_opposite_ips)
        if match_opposite_networks is not None:
            pulumi.set(__self__, "match_opposite_networks", match_opposite_networks)
        if match_opposite_ports is not None:
            pulumi.set(__self__, "match_opposite_ports", match_opposite_ports)
        if network_ids is not None:
            pulumi.set(__self__, "network_ids", network_ids)
        if port is not None:
            pulumi.set(__self__, "port", port)
        if port_group_id is not None:
            pulumi.set(__self__, "port_group_id", port_group_id)

    @_builtins.property
    @pulumi.getter(name="zoneId")
    def zone_id(self) -> _builtins.str:
        """
        ID of the firewall zone.
        """
        return pulumi.get(self, "zone_id")

    @_builtins.property
    @pulumi.getter(name="clientMacs")
    def client_macs(self) -> Optional[Sequence[_builtins.str]]:
        """
        List of client MAC addresses.
        """
        return pulumi.get(self, "client_macs")

    @_builtins.property
    @pulumi.getter(name="ipGroupId")
    def ip_group_id(self) -> Optional[_builtins.str]:
        """
        ID of the source IP group.
        """
        return pulumi.get(self, "ip_group_id")

    @_builtins.property
    @pulumi.getter
    def ips(self) -> Optional[Sequence[_builtins.str]]:
        """
        List of source IPs.
        """
        return pulumi.get(self, "ips")

    @_builtins.property
    @pulumi.getter
    def mac(self) -> Optional[_builtins.str]:
        """
        Source MAC address.
        """
        return pulumi.get(self, "mac")

    @_builtins.property
    @pulumi.getter
    def macs(self) -> Optional[Sequence[_builtins.str]]:
        """
        List of MAC addresses.
        """
        return pulumi.get(self, "macs")

    @_builtins.property
    @pulumi.getter(name="matchOppositeIps")
    def match_opposite_ips(self) -> Optional[_builtins.bool]:
        """
        Whether to match opposite IPs.
        """
        return pulumi.get(self, "match_opposite_ips")

    @_builtins.property
    @pulumi.getter(name="matchOppositeNetworks")
    def match_opposite_networks(self) -> Optional[_builtins.bool]:
        """
        Whether to match opposite networks.
        """
        return pulumi.get(self, "match_opposite_networks")

    @_builtins.property
    @pulumi.getter(name="matchOppositePorts")
    def match_opposite_ports(self) -> Optional[_builtins.bool]:
        """
        Whether to match opposite ports.
        """
        return pulumi.get(self, "match_opposite_ports")

    @_builtins.property
    @pulumi.getter(name="networkIds")
    def network_ids(self) -> Optional[Sequence[_builtins.str]]:
        """
        List of network IDs.
        """
        return pulumi.get(self, "network_ids")

    @_builtins.property
    @pulumi.getter
    def port(self) -> Optional[_builtins.int]:
        """
        Source port.
        """
        return pulumi.get(self, "port")

    @_builtins.property
    @pulumi.getter(name="portGroupId")
    def port_group_id(self) -> Optional[_builtins.str]:
        """
        ID of the source port group.
        """
        return pulumi.get(self, "port_group_id")


