# 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


class CloudWatchLogsDestination(AWSProperty):
    """
    `CloudWatchLogsDestination <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-smsvoice-configurationset-cloudwatchlogsdestination.html>`__
    """

    props: PropsDictType = {
        "IamRoleArn": (str, True),
        "LogGroupArn": (str, True),
    }


class KinesisFirehoseDestination(AWSProperty):
    """
    `KinesisFirehoseDestination <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-smsvoice-configurationset-kinesisfirehosedestination.html>`__
    """

    props: PropsDictType = {
        "DeliveryStreamArn": (str, True),
        "IamRoleArn": (str, True),
    }


class SnsDestination(AWSProperty):
    """
    `SnsDestination <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-smsvoice-configurationset-snsdestination.html>`__
    """

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


class EventDestination(AWSProperty):
    """
    `EventDestination <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-smsvoice-configurationset-eventdestination.html>`__
    """

    props: PropsDictType = {
        "CloudWatchLogsDestination": (CloudWatchLogsDestination, False),
        "Enabled": (boolean, True),
        "EventDestinationName": (str, True),
        "KinesisFirehoseDestination": (KinesisFirehoseDestination, False),
        "MatchingEventTypes": ([str], True),
        "SnsDestination": (SnsDestination, False),
    }


class ConfigurationSet(AWSObject):
    """
    `ConfigurationSet <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-smsvoice-configurationset.html>`__
    """

    resource_type = "AWS::SMSVOICE::ConfigurationSet"

    props: PropsDictType = {
        "ConfigurationSetName": (str, False),
        "DefaultSenderId": (str, False),
        "EventDestinations": ([EventDestination], False),
        "MessageFeedbackEnabled": (boolean, False),
        "ProtectConfigurationId": (str, False),
        "Tags": (Tags, False),
    }


class OptOutList(AWSObject):
    """
    `OptOutList <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-smsvoice-optoutlist.html>`__
    """

    resource_type = "AWS::SMSVOICE::OptOutList"

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


class MandatoryKeyword(AWSProperty):
    """
    `MandatoryKeyword <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-smsvoice-pool-mandatorykeyword.html>`__
    """

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


class MandatoryKeywords(AWSProperty):
    """
    `MandatoryKeywords <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-smsvoice-pool-mandatorykeywords.html>`__
    """

    props: PropsDictType = {
        "HELP": (MandatoryKeyword, True),
        "STOP": (MandatoryKeyword, True),
    }


class OptionalKeyword(AWSProperty):
    """
    `OptionalKeyword <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-smsvoice-pool-optionalkeyword.html>`__
    """

    props: PropsDictType = {
        "Action": (str, True),
        "Keyword": (str, True),
        "Message": (str, True),
    }


class TwoWay(AWSProperty):
    """
    `TwoWay <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-smsvoice-pool-twoway.html>`__
    """

    props: PropsDictType = {
        "ChannelArn": (str, False),
        "ChannelRole": (str, False),
        "Enabled": (boolean, True),
    }


class PhoneNumber(AWSObject):
    """
    `PhoneNumber <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-smsvoice-phonenumber.html>`__
    """

    resource_type = "AWS::SMSVOICE::PhoneNumber"

    props: PropsDictType = {
        "DeletionProtectionEnabled": (boolean, False),
        "IsoCountryCode": (str, True),
        "MandatoryKeywords": (MandatoryKeywords, True),
        "NumberCapabilities": ([str], True),
        "NumberType": (str, True),
        "OptOutListName": (str, False),
        "OptionalKeywords": ([OptionalKeyword], False),
        "SelfManagedOptOutsEnabled": (boolean, False),
        "Tags": (Tags, False),
        "TwoWay": (TwoWay, False),
    }


class Pool(AWSObject):
    """
    `Pool <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-smsvoice-pool.html>`__
    """

    resource_type = "AWS::SMSVOICE::Pool"

    props: PropsDictType = {
        "DeletionProtectionEnabled": (boolean, False),
        "MandatoryKeywords": (MandatoryKeywords, True),
        "OptOutListName": (str, False),
        "OptionalKeywords": ([OptionalKeyword], False),
        "OriginationIdentities": ([str], True),
        "SelfManagedOptOutsEnabled": (boolean, False),
        "SharedRoutesEnabled": (boolean, False),
        "Tags": (Tags, False),
        "TwoWay": (TwoWay, False),
    }


class CountryRule(AWSProperty):
    """
    `CountryRule <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-smsvoice-protectconfiguration-countryrule.html>`__
    """

    props: PropsDictType = {
        "CountryCode": (str, True),
        "ProtectStatus": (str, True),
    }


class CountryRuleSet(AWSProperty):
    """
    `CountryRuleSet <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-smsvoice-protectconfiguration-countryruleset.html>`__
    """

    props: PropsDictType = {
        "MMS": ([CountryRule], False),
        "SMS": ([CountryRule], False),
        "VOICE": ([CountryRule], False),
    }


class ProtectConfiguration(AWSObject):
    """
    `ProtectConfiguration <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-smsvoice-protectconfiguration.html>`__
    """

    resource_type = "AWS::SMSVOICE::ProtectConfiguration"

    props: PropsDictType = {
        "CountryRuleSet": (CountryRuleSet, False),
        "DeletionProtectionEnabled": (boolean, False),
        "Tags": (Tags, False),
    }


class ResourcePolicy(AWSObject):
    """
    `ResourcePolicy <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-smsvoice-resourcepolicy.html>`__
    """

    resource_type = "AWS::SMSVOICE::ResourcePolicy"

    props: PropsDictType = {
        "PolicyDocument": (dict, True),
        "ResourceArn": (str, True),
    }


class SenderId(AWSObject):
    """
    `SenderId <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-smsvoice-senderid.html>`__
    """

    resource_type = "AWS::SMSVOICE::SenderId"

    props: PropsDictType = {
        "DeletionProtectionEnabled": (boolean, False),
        "IsoCountryCode": (str, True),
        "SenderId": (str, True),
        "Tags": (Tags, False),
    }
