# Copyright (c) 2012-2025, Mark Peek <mark@peek.org>
# All rights reserved.
#
# See LICENSE file for full license.
#
# *** Do not modify - this file is autogenerated ***


from . import AWSObject, AWSProperty, PropsDictType, Tags
from .validators import boolean, double, integer
from .validators.groundstation import validate_json_checker


class Bandwidth(AWSProperty):
    """
    `Bandwidth <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-groundstation-config-frequencybandwidth.html>`__
    """

    props: PropsDictType = {
        "Units": (str, False),
        "Value": (double, False),
    }


class Frequency(AWSProperty):
    """
    `Frequency <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-groundstation-config-frequency.html>`__
    """

    props: PropsDictType = {
        "Units": (str, False),
        "Value": (double, False),
    }


class SpectrumConfig(AWSProperty):
    """
    `SpectrumConfig <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-groundstation-config-spectrumconfig.html>`__
    """

    props: PropsDictType = {
        "Bandwidth": (Bandwidth, False),
        "CenterFrequency": (Frequency, False),
        "Polarization": (str, False),
    }


class AntennaDownlinkConfig(AWSProperty):
    """
    `AntennaDownlinkConfig <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-groundstation-config-antennadownlinkconfig.html>`__
    """

    props: PropsDictType = {
        "SpectrumConfig": (SpectrumConfig, False),
    }


class DecodeConfig(AWSProperty):
    """
    `DecodeConfig <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-groundstation-config-decodeconfig.html>`__
    """

    props: PropsDictType = {
        "UnvalidatedJSON": (validate_json_checker, False),
    }


class DemodulationConfig(AWSProperty):
    """
    `DemodulationConfig <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-groundstation-config-demodulationconfig.html>`__
    """

    props: PropsDictType = {
        "UnvalidatedJSON": (validate_json_checker, False),
    }


class AntennaDownlinkDemodDecodeConfig(AWSProperty):
    """
    `AntennaDownlinkDemodDecodeConfig <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-groundstation-config-antennadownlinkdemoddecodeconfig.html>`__
    """

    props: PropsDictType = {
        "DecodeConfig": (DecodeConfig, False),
        "DemodulationConfig": (DemodulationConfig, False),
        "SpectrumConfig": (SpectrumConfig, False),
    }


class Eirp(AWSProperty):
    """
    `Eirp <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-groundstation-config-eirp.html>`__
    """

    props: PropsDictType = {
        "Units": (str, False),
        "Value": (double, False),
    }


class AntennaUplinkConfig(AWSProperty):
    """
    `AntennaUplinkConfig <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-groundstation-config-antennauplinkconfig.html>`__
    """

    props: PropsDictType = {
        "SpectrumConfig": (SpectrumConfig, False),
        "TargetEirp": (Eirp, False),
        "TransmitDisabled": (boolean, False),
    }


class DataflowEndpointConfig(AWSProperty):
    """
    `DataflowEndpointConfig <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-groundstation-config-dataflowendpointconfig.html>`__
    """

    props: PropsDictType = {
        "DataflowEndpointName": (str, False),
        "DataflowEndpointRegion": (str, False),
    }


class S3RecordingConfig(AWSProperty):
    """
    `S3RecordingConfig <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-groundstation-config-s3recordingconfig.html>`__
    """

    props: PropsDictType = {
        "BucketArn": (str, False),
        "Prefix": (str, False),
        "RoleArn": (str, False),
    }


class KinesisDataStreamData(AWSProperty):
    """
    `KinesisDataStreamData <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-groundstation-config-kinesisdatastreamdata.html>`__
    """

    props: PropsDictType = {
        "KinesisDataStreamArn": (str, True),
        "KinesisRoleArn": (str, True),
    }


class TelemetrySinkData(AWSProperty):
    """
    `TelemetrySinkData <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-groundstation-config-telemetrysinkdata.html>`__
    """

    props: PropsDictType = {
        "KinesisDataStreamData": (KinesisDataStreamData, True),
    }


class TelemetrySinkConfig(AWSProperty):
    """
    `TelemetrySinkConfig <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-groundstation-config-telemetrysinkconfig.html>`__
    """

    props: PropsDictType = {
        "TelemetrySinkData": (TelemetrySinkData, True),
        "TelemetrySinkType": (str, True),
    }


class TrackingConfig(AWSProperty):
    """
    `TrackingConfig <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-groundstation-config-trackingconfig.html>`__
    """

    props: PropsDictType = {
        "Autotrack": (str, False),
    }


class UplinkEchoConfig(AWSProperty):
    """
    `UplinkEchoConfig <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-groundstation-config-uplinkechoconfig.html>`__
    """

    props: PropsDictType = {
        "AntennaUplinkConfigArn": (str, False),
        "Enabled": (boolean, False),
    }


class ConfigData(AWSProperty):
    """
    `ConfigData <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-groundstation-config-configdata.html>`__
    """

    props: PropsDictType = {
        "AntennaDownlinkConfig": (AntennaDownlinkConfig, False),
        "AntennaDownlinkDemodDecodeConfig": (AntennaDownlinkDemodDecodeConfig, False),
        "AntennaUplinkConfig": (AntennaUplinkConfig, False),
        "DataflowEndpointConfig": (DataflowEndpointConfig, False),
        "S3RecordingConfig": (S3RecordingConfig, False),
        "TelemetrySinkConfig": (TelemetrySinkConfig, False),
        "TrackingConfig": (TrackingConfig, False),
        "UplinkEchoConfig": (UplinkEchoConfig, False),
    }


class Config(AWSObject):
    """
    `Config <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-groundstation-config.html>`__
    """

    resource_type = "AWS::GroundStation::Config"

    props: PropsDictType = {
        "ConfigData": (ConfigData, True),
        "Name": (str, True),
        "Tags": (Tags, False),
    }


class SocketAddress(AWSProperty):
    """
    `SocketAddress <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-groundstation-dataflowendpointgroupv2-socketaddress.html>`__
    """

    props: PropsDictType = {
        "Name": (str, True),
        "Port": (integer, True),
    }


class ConnectionDetails(AWSProperty):
    """
    `ConnectionDetails <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-groundstation-dataflowendpointgroupv2-connectiondetails.html>`__
    """

    props: PropsDictType = {
        "Mtu": (integer, False),
        "SocketAddress": (SocketAddress, True),
    }


class IntegerRange(AWSProperty):
    """
    `IntegerRange <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-groundstation-dataflowendpointgroupv2-integerrange.html>`__
    """

    props: PropsDictType = {
        "Maximum": (integer, True),
        "Minimum": (integer, True),
    }


class RangedSocketAddress(AWSProperty):
    """
    `RangedSocketAddress <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-groundstation-dataflowendpointgroupv2-rangedsocketaddress.html>`__
    """

    props: PropsDictType = {
        "Name": (str, True),
        "PortRange": (IntegerRange, True),
    }


class RangedConnectionDetails(AWSProperty):
    """
    `RangedConnectionDetails <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-groundstation-dataflowendpointgroupv2-rangedconnectiondetails.html>`__
    """

    props: PropsDictType = {
        "Mtu": (integer, False),
        "SocketAddress": (RangedSocketAddress, True),
    }


class DownlinkConnectionDetails(AWSProperty):
    """
    `DownlinkConnectionDetails <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-groundstation-dataflowendpointgroupv2-downlinkconnectiondetails.html>`__
    """

    props: PropsDictType = {
        "AgentIpAndPortAddress": (RangedConnectionDetails, True),
        "EgressAddressAndPort": (ConnectionDetails, True),
    }


class DownlinkDataflowDetails(AWSProperty):
    """
    `DownlinkDataflowDetails <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-groundstation-dataflowendpointgroupv2-downlinkdataflowdetails.html>`__
    """

    props: PropsDictType = {
        "AgentConnectionDetails": (DownlinkConnectionDetails, True),
    }


class DownlinkAwsGroundStationAgentEndpointDetails(AWSProperty):
    """
    `DownlinkAwsGroundStationAgentEndpointDetails <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-groundstation-dataflowendpointgroupv2-downlinkawsgroundstationagentendpointdetails.html>`__
    """

    props: PropsDictType = {
        "AgentStatus": (str, False),
        "AuditResults": (str, False),
        "DataflowDetails": (DownlinkDataflowDetails, True),
        "Name": (str, True),
    }


class UplinkConnectionDetails(AWSProperty):
    """
    `UplinkConnectionDetails <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-groundstation-dataflowendpointgroupv2-uplinkconnectiondetails.html>`__
    """

    props: PropsDictType = {
        "AgentIpAndPortAddress": (RangedConnectionDetails, True),
        "IngressAddressAndPort": (ConnectionDetails, True),
    }


class UplinkDataflowDetails(AWSProperty):
    """
    `UplinkDataflowDetails <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-groundstation-dataflowendpointgroupv2-uplinkdataflowdetails.html>`__
    """

    props: PropsDictType = {
        "AgentConnectionDetails": (UplinkConnectionDetails, True),
    }


class UplinkAwsGroundStationAgentEndpointDetails(AWSProperty):
    """
    `UplinkAwsGroundStationAgentEndpointDetails <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-groundstation-dataflowendpointgroupv2-uplinkawsgroundstationagentendpointdetails.html>`__
    """

    props: PropsDictType = {
        "AgentStatus": (str, False),
        "AuditResults": (str, False),
        "DataflowDetails": (UplinkDataflowDetails, True),
        "Name": (str, True),
    }


class EndpointDetails(AWSProperty):
    """
    `EndpointDetails <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-groundstation-dataflowendpointgroupv2-endpointdetails.html>`__
    """

    props: PropsDictType = {
        "DownlinkAwsGroundStationAgentEndpoint": (
            DownlinkAwsGroundStationAgentEndpointDetails,
            False,
        ),
        "UplinkAwsGroundStationAgentEndpoint": (
            UplinkAwsGroundStationAgentEndpointDetails,
            False,
        ),
    }


class DataflowEndpointGroup(AWSObject):
    """
    `DataflowEndpointGroup <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-groundstation-dataflowendpointgroup.html>`__
    """

    resource_type = "AWS::GroundStation::DataflowEndpointGroup"

    props: PropsDictType = {
        "ContactPostPassDurationSeconds": (integer, False),
        "ContactPrePassDurationSeconds": (integer, False),
        "EndpointDetails": ([EndpointDetails], True),
        "Tags": (Tags, False),
    }


class DownlinkAwsGroundStationAgentEndpoint(AWSProperty):
    """
    `DownlinkAwsGroundStationAgentEndpoint <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-groundstation-dataflowendpointgroupv2-downlinkawsgroundstationagentendpoint.html>`__
    """

    props: PropsDictType = {
        "DataflowDetails": (DownlinkDataflowDetails, True),
        "Name": (str, True),
    }


class UplinkAwsGroundStationAgentEndpoint(AWSProperty):
    """
    `UplinkAwsGroundStationAgentEndpoint <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-groundstation-dataflowendpointgroupv2-uplinkawsgroundstationagentendpoint.html>`__
    """

    props: PropsDictType = {
        "DataflowDetails": (UplinkDataflowDetails, True),
        "Name": (str, True),
    }


class CreateEndpointDetails(AWSProperty):
    """
    `CreateEndpointDetails <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-groundstation-dataflowendpointgroupv2-createendpointdetails.html>`__
    """

    props: PropsDictType = {
        "DownlinkAwsGroundStationAgentEndpoint": (
            DownlinkAwsGroundStationAgentEndpoint,
            False,
        ),
        "UplinkAwsGroundStationAgentEndpoint": (
            UplinkAwsGroundStationAgentEndpoint,
            False,
        ),
    }


class DataflowEndpointGroupV2(AWSObject):
    """
    `DataflowEndpointGroupV2 <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-groundstation-dataflowendpointgroupv2.html>`__
    """

    resource_type = "AWS::GroundStation::DataflowEndpointGroupV2"

    props: PropsDictType = {
        "ContactPostPassDurationSeconds": (integer, False),
        "ContactPrePassDurationSeconds": (integer, False),
        "Endpoints": ([CreateEndpointDetails], False),
        "Tags": (Tags, False),
    }


class DataflowEdge(AWSProperty):
    """
    `DataflowEdge <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-groundstation-missionprofile-dataflowedge.html>`__
    """

    props: PropsDictType = {
        "Destination": (str, False),
        "Source": (str, False),
    }


class StreamsKmsKey(AWSProperty):
    """
    `StreamsKmsKey <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-groundstation-missionprofile-streamskmskey.html>`__
    """

    props: PropsDictType = {
        "KmsAliasArn": (str, False),
        "KmsAliasName": (str, False),
        "KmsKeyArn": (str, False),
    }


class MissionProfile(AWSObject):
    """
    `MissionProfile <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-groundstation-missionprofile.html>`__
    """

    resource_type = "AWS::GroundStation::MissionProfile"

    props: PropsDictType = {
        "ContactPostPassDurationSeconds": (integer, False),
        "ContactPrePassDurationSeconds": (integer, False),
        "DataflowEdges": ([DataflowEdge], True),
        "MinimumViableContactDurationSeconds": (integer, True),
        "Name": (str, True),
        "StreamsKmsKey": (StreamsKmsKey, False),
        "StreamsKmsRole": (str, False),
        "Tags": (Tags, False),
        "TelemetrySinkConfigArn": (str, False),
        "TrackingConfigArn": (str, True),
    }


class AwsGroundStationAgentEndpoint(AWSProperty):
    """
    `AwsGroundStationAgentEndpoint <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-groundstation-dataflowendpointgroup-awsgroundstationagentendpoint.html>`__
    """

    props: PropsDictType = {
        "AgentStatus": (str, False),
        "AuditResults": (str, False),
        "EgressAddress": (ConnectionDetails, False),
        "IngressAddress": (RangedConnectionDetails, False),
        "Name": (str, False),
    }


class DataflowEndpoint(AWSProperty):
    """
    `DataflowEndpoint <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-groundstation-dataflowendpointgroup-dataflowendpoint.html>`__
    """

    props: PropsDictType = {
        "Address": (SocketAddress, False),
        "Mtu": (integer, False),
        "Name": (str, False),
    }


class SecurityDetails(AWSProperty):
    """
    `SecurityDetails <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-groundstation-dataflowendpointgroup-securitydetails.html>`__
    """

    props: PropsDictType = {
        "RoleArn": (str, False),
        "SecurityGroupIds": ([str], False),
        "SubnetIds": ([str], False),
    }
