from typing import Any, Dict, List, Literal, Optional, Union
VariableOptionTypeDef = Literal["variable"]
GlobalOptionTypeDef = Literal["global"]
TcpUdpProtocolValueDef = Literal["tcp", "udp"]
DefaultOptionTypeDef = Literal["default"]
EndpointTrackerTypeDef = Literal["static-route"]
DefaultEndpointTrackerTypeDef = Literal["static-route"]
TrackerTypeDef = Literal["endpoint"]
DefaultTrackerTypeDef = Literal["endpoint"]
class OneOfTrackerNameOptionsDef1:
    option_type: VariableOptionTypeDef
    value: str
    default: Optional[str]
    description: Optional[str]
class OneOfTrackerNameOptionsDef2:
    option_type: GlobalOptionTypeDef
    value: str
class OneOfEndpointApiUrlOptionsDef1:
    option_type: VariableOptionTypeDef
    value: str
    default: Optional[str]
    description: Optional[str]
class OneOfEndpointApiUrlOptionsDef2:
    option_type: GlobalOptionTypeDef
    value: str
class OneOfEndpointDnsNameOptionsDef1:
    option_type: VariableOptionTypeDef
    value: str
    default: Optional[str]
    description: Optional[str]
class OneOfEndpointDnsNameOptionsDef2:
    option_type: GlobalOptionTypeDef
    value: str
class OneOfEndpointIpOptionsDef1:
    option_type: VariableOptionTypeDef
    value: str
    default: Optional[str]
    description: Optional[str]
class OneOfEndpointIpOptionsDef2:
    option_type: GlobalOptionTypeDef
    value: str
class OneOfTrackerTcpUdpProtocolOptionsDef1:
    option_type: VariableOptionTypeDef
    value: str
    default: Optional[str]
    description: Optional[str]
class OneOfTrackerTcpUdpProtocolOptionsDef2:
    option_type: GlobalOptionTypeDef
    # protocol type
    value: TcpUdpProtocolValueDef  # pytype: disable=annotation-type-mismatch
class OneOfPortOptionsDef1:
    option_type: GlobalOptionTypeDef
    value: int
class OneOfPortOptionsDef2:
    option_type: VariableOptionTypeDef
    value: str
    default: Optional[str]
    description: Optional[str]
class EndpointTcpUdp:
    """
    Endpoint tcp/udp
    """
    port: Optional[Union[OneOfPortOptionsDef1, OneOfPortOptionsDef2]]
    protocol: Optional[
        Union[
            OneOfTrackerTcpUdpProtocolOptionsDef1,
            OneOfTrackerTcpUdpProtocolOptionsDef2,
        ]
    ]
class OneOfIntervalOptionsDef1:
    option_type: VariableOptionTypeDef
    value: str
    default: Optional[str]
    description: Optional[str]
class OneOfIntervalOptionsDef2:
    option_type: GlobalOptionTypeDef
    value: int
class OneOfIntervalOptionsDef3:
    option_type: DefaultOptionTypeDef
    value: int
class OneOfMultiplierOptionsDef1:
    option_type: VariableOptionTypeDef
    value: str
    default: Optional[str]
    description: Optional[str]
class OneOfMultiplierOptionsDef2:
    option_type: GlobalOptionTypeDef
    value: int
class OneOfMultiplierOptionsDef3:
    option_type: DefaultOptionTypeDef
    value: int
class OneOfThresholdOptionsDef1:
    option_type: VariableOptionTypeDef
    value: str
    default: Optional[str]
    description: Optional[str]
class OneOfThresholdOptionsDef2:
    option_type: GlobalOptionTypeDef
    value: int
class OneOfThresholdOptionsDef3:
    option_type: DefaultOptionTypeDef
    value: int
class OneOfEndpointTrackerTypeOptionsDef1:
    option_type: VariableOptionTypeDef
    value: str
    default: Optional[str]
    description: Optional[str]
class OneOfEndpointTrackerTypeOptionsDef2:
    option_type: GlobalOptionTypeDef
    value: EndpointTrackerTypeDef
class OneOfEndpointTrackerTypeOptionsDef3:
    option_type: DefaultOptionTypeDef
    value: DefaultEndpointTrackerTypeDef  # pytype: disable=annotation-type-mismatch
class OneOfTrackerTypeOptionsDef1:
    option_type: VariableOptionTypeDef
    value: str
    default: Optional[str]
    description: Optional[str]
class OneOfTrackerTypeOptionsDef2:
    option_type: GlobalOptionTypeDef
    value: TrackerTypeDef
class OneOfTrackerTypeOptionsDef3:
    option_type: DefaultOptionTypeDef
    value: DefaultTrackerTypeDef  # pytype: disable=annotation-type-mismatch
class TrackerData:
    tracker_name: Union[
        OneOfTrackerNameOptionsDef1, OneOfTrackerNameOptionsDef2
    ]
    tracker_type: Union[
        OneOfTrackerTypeOptionsDef1,
        OneOfTrackerTypeOptionsDef2,
        OneOfTrackerTypeOptionsDef3,
    ]
    endpoint_api_url: Optional[
        Union[
            OneOfEndpointApiUrlOptionsDef1,
            OneOfEndpointApiUrlOptionsDef2,
        ]
    ]
    endpoint_dns_name: Optional[
        Union[
            OneOfEndpointDnsNameOptionsDef1,
            OneOfEndpointDnsNameOptionsDef2,
        ]
    ]
    endpoint_ip: Optional[
        Union[OneOfEndpointIpOptionsDef1, OneOfEndpointIpOptionsDef2]
    ]
    # Endpoint tcp/udp
    endpoint_tcp_udp: Optional[EndpointTcpUdp]
    endpoint_tracker_type: Optional[
        Union[
            OneOfEndpointTrackerTypeOptionsDef1,
            OneOfEndpointTrackerTypeOptionsDef2,
            OneOfEndpointTrackerTypeOptionsDef3,
        ]
    ]
    interval: Optional[
        Union[
            OneOfIntervalOptionsDef1,
            OneOfIntervalOptionsDef2,
            OneOfIntervalOptionsDef3,
        ]
    ]
    multiplier: Optional[
        Union[
            OneOfMultiplierOptionsDef1,
            OneOfMultiplierOptionsDef2,
            OneOfMultiplierOptionsDef3,
        ]
    ]
    threshold: Optional[
        Union[
            OneOfThresholdOptionsDef1,
            OneOfThresholdOptionsDef2,
            OneOfThresholdOptionsDef3,
        ]
    ]
class Payload:
    """
    Tracker profile parcel schema for common request
    """
    data: TrackerData
    name: str
    # Set the parcel description
    description: Optional[str]
    metadata: Optional[Any]
class Data:
    # User who last created this.
    created_by: Optional[str]
    # Timestamp of creation
    created_on: Optional[int]
    # User who last updated this.
    last_updated_by: Optional[str]
    # Timestamp of last update
    last_updated_on: Optional[int]
    parcel_id: Optional[str]
    parcel_type: Optional[str]
    # Tracker profile parcel schema for common request
    payload: Optional[Payload]
class GetListSdwanServiceTrackerPayload:
    data: Optional[List[Data]]
class CreateTrackerProfileParcelForServicePostResponse:
    """
    Profile Parcel POST Response schema
    """
    parcel_id: str
    metadata: Optional[Any]
class ServiceTrackerData:
    tracker_name: Union[
        OneOfTrackerNameOptionsDef1, OneOfTrackerNameOptionsDef2
    ]
    tracker_type: Union[
        OneOfTrackerTypeOptionsDef1,
        OneOfTrackerTypeOptionsDef2,
        OneOfTrackerTypeOptionsDef3,
    ]
    endpoint_api_url: Optional[
        Union[
            OneOfEndpointApiUrlOptionsDef1,
            OneOfEndpointApiUrlOptionsDef2,
        ]
    ]
    endpoint_dns_name: Optional[
        Union[
            OneOfEndpointDnsNameOptionsDef1,
            OneOfEndpointDnsNameOptionsDef2,
        ]
    ]
    endpoint_ip: Optional[
        Union[OneOfEndpointIpOptionsDef1, OneOfEndpointIpOptionsDef2]
    ]
    # Endpoint tcp/udp
    endpoint_tcp_udp: Optional[EndpointTcpUdp]
    endpoint_tracker_type: Optional[
        Union[
            OneOfEndpointTrackerTypeOptionsDef1,
            OneOfEndpointTrackerTypeOptionsDef2,
            OneOfEndpointTrackerTypeOptionsDef3,
        ]
    ]
    interval: Optional[
        Union[
            OneOfIntervalOptionsDef1,
            OneOfIntervalOptionsDef2,
            OneOfIntervalOptionsDef3,
        ]
    ]
    multiplier: Optional[
        Union[
            OneOfMultiplierOptionsDef1,
            OneOfMultiplierOptionsDef2,
            OneOfMultiplierOptionsDef3,
        ]
    ]
    threshold: Optional[
        Union[
            OneOfThresholdOptionsDef1,
            OneOfThresholdOptionsDef2,
            OneOfThresholdOptionsDef3,
        ]
    ]
class CreateTrackerProfileParcelForServicePostRequest:
    """
    Tracker profile parcel schema for common request
    """
    data: ServiceTrackerData
    name: str
    # Set the parcel description
    description: Optional[str]
    metadata: Optional[Any]
class GetSingleSdwanServiceTrackerPayload:
    # User who last created this.
    created_by: Optional[str]
    # Timestamp of creation
    created_on: Optional[int]
    # User who last updated this.
    last_updated_by: Optional[str]
    # Timestamp of last update
    last_updated_on: Optional[int]
    parcel_id: Optional[str]
    parcel_type: Optional[str]
    # Tracker profile parcel schema for common request
    payload: Optional[Payload]
class EditTrackerProfileParcelForServicePutResponse:
    """
    Profile Parcel PUT Response schema
    """
    id: str
    metadata: Optional[Any]
class SdwanServiceTrackerData:
    tracker_name: Union[
        OneOfTrackerNameOptionsDef1, OneOfTrackerNameOptionsDef2
    ]
    tracker_type: Union[
        OneOfTrackerTypeOptionsDef1,
        OneOfTrackerTypeOptionsDef2,
        OneOfTrackerTypeOptionsDef3,
    ]
    endpoint_api_url: Optional[
        Union[
            OneOfEndpointApiUrlOptionsDef1,
            OneOfEndpointApiUrlOptionsDef2,
        ]
    ]
    endpoint_dns_name: Optional[
        Union[
            OneOfEndpointDnsNameOptionsDef1,
            OneOfEndpointDnsNameOptionsDef2,
        ]
    ]
    endpoint_ip: Optional[
        Union[OneOfEndpointIpOptionsDef1, OneOfEndpointIpOptionsDef2]
    ]
    # Endpoint tcp/udp
    endpoint_tcp_udp: Optional[EndpointTcpUdp]
    endpoint_tracker_type: Optional[
        Union[
            OneOfEndpointTrackerTypeOptionsDef1,
            OneOfEndpointTrackerTypeOptionsDef2,
            OneOfEndpointTrackerTypeOptionsDef3,
        ]
    ]
    interval: Optional[
        Union[
            OneOfIntervalOptionsDef1,
            OneOfIntervalOptionsDef2,
            OneOfIntervalOptionsDef3,
        ]
    ]
    multiplier: Optional[
        Union[
            OneOfMultiplierOptionsDef1,
            OneOfMultiplierOptionsDef2,
            OneOfMultiplierOptionsDef3,
        ]
    ]
    threshold: Optional[
        Union[
            OneOfThresholdOptionsDef1,
            OneOfThresholdOptionsDef2,
            OneOfThresholdOptionsDef3,
        ]
    ]
class EditTrackerProfileParcelForServicePutRequest:
    """
    Tracker profile parcel schema for common request
    """
    data: SdwanServiceTrackerData
    name: str
    # Set the parcel description
    description: Optional[str]
    metadata: Optional[Any]