# 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


class AgentStatus(AWSObject):
    """
    `AgentStatus <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connect-agentstatus.html>`__
    """

    resource_type = "AWS::Connect::AgentStatus"

    props: PropsDictType = {
        "Description": (str, False),
        "DisplayOrder": (integer, False),
        "InstanceArn": (str, True),
        "Name": (str, True),
        "ResetOrderNumber": (boolean, False),
        "State": (str, True),
        "Tags": (Tags, False),
        "Type": (str, False),
    }


class ApprovedOrigin(AWSObject):
    """
    `ApprovedOrigin <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connect-approvedorigin.html>`__
    """

    resource_type = "AWS::Connect::ApprovedOrigin"

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


class ContactFlow(AWSObject):
    """
    `ContactFlow <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connect-contactflow.html>`__
    """

    resource_type = "AWS::Connect::ContactFlow"

    props: PropsDictType = {
        "Content": (str, True),
        "Description": (str, False),
        "InstanceArn": (str, True),
        "Name": (str, True),
        "State": (str, False),
        "Tags": (Tags, False),
        "Type": (str, True),
    }


class ExternalInvocationConfiguration(AWSProperty):
    """
    `ExternalInvocationConfiguration <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-contactflowmodule-externalinvocationconfiguration.html>`__
    """

    props: PropsDictType = {
        "Enabled": (boolean, True),
    }


class ContactFlowModule(AWSObject):
    """
    `ContactFlowModule <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connect-contactflowmodule.html>`__
    """

    resource_type = "AWS::Connect::ContactFlowModule"

    props: PropsDictType = {
        "Content": (str, True),
        "Description": (str, False),
        "ExternalInvocationConfiguration": (ExternalInvocationConfiguration, False),
        "InstanceArn": (str, True),
        "Name": (str, True),
        "Settings": (str, False),
        "State": (str, False),
        "Tags": (Tags, False),
    }


class ContactFlowVersion(AWSObject):
    """
    `ContactFlowVersion <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connect-contactflowversion.html>`__
    """

    resource_type = "AWS::Connect::ContactFlowVersion"

    props: PropsDictType = {
        "ContactFlowId": (str, True),
        "Description": (str, False),
    }


class DataTable(AWSObject):
    """
    `DataTable <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connect-datatable.html>`__
    """

    resource_type = "AWS::Connect::DataTable"

    props: PropsDictType = {
        "Description": (str, False),
        "InstanceArn": (str, False),
        "Name": (str, False),
        "Status": (str, False),
        "Tags": (Tags, False),
        "TimeZone": (str, False),
        "ValueLockLevel": (str, False),
    }


class Enum(AWSProperty):
    """
    `Enum <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-datatableattribute-enum.html>`__
    """

    props: PropsDictType = {
        "Strict": (boolean, False),
        "Values": ([str], False),
    }


class Validation(AWSProperty):
    """
    `Validation <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-datatableattribute-validation.html>`__
    """

    props: PropsDictType = {
        "Enum": (Enum, False),
        "ExclusiveMaximum": (double, False),
        "ExclusiveMinimum": (double, False),
        "MaxLength": (integer, False),
        "MaxValues": (integer, False),
        "Maximum": (double, False),
        "MinLength": (integer, False),
        "MinValues": (integer, False),
        "Minimum": (double, False),
        "MultipleOf": (double, False),
    }


class DataTableAttribute(AWSObject):
    """
    `DataTableAttribute <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connect-datatableattribute.html>`__
    """

    resource_type = "AWS::Connect::DataTableAttribute"

    props: PropsDictType = {
        "DataTableArn": (str, False),
        "Description": (str, False),
        "InstanceArn": (str, False),
        "Name": (str, False),
        "Primary": (boolean, False),
        "Validation": (Validation, False),
        "ValueType": (str, False),
    }


class Value(AWSProperty):
    """
    `Value <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-datatablerecord-value.html>`__
    """

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


class DataTableRecordProperty(AWSProperty):
    """
    `DataTableRecordProperty <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-datatablerecord-datatablerecord.html>`__
    """

    props: PropsDictType = {
        "PrimaryValues": ([Value], False),
        "Values": ([Value], True),
    }


class DataTableRecord(AWSObject):
    """
    `DataTableRecord <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connect-datatablerecord.html>`__
    """

    resource_type = "AWS::Connect::DataTableRecord"

    props: PropsDictType = {
        "DataTableArn": (str, False),
        "DataTableRecord": (DataTableRecordProperty, False),
        "InstanceArn": (str, False),
    }


class AliasConfiguration(AWSProperty):
    """
    `AliasConfiguration <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-emailaddress-aliasconfiguration.html>`__
    """

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


class EmailAddress(AWSObject):
    """
    `EmailAddress <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connect-emailaddress.html>`__
    """

    resource_type = "AWS::Connect::EmailAddress"

    props: PropsDictType = {
        "AliasConfigurations": ([AliasConfiguration], False),
        "Description": (str, False),
        "DisplayName": (str, False),
        "EmailAddress": (str, True),
        "InstanceArn": (str, True),
        "Tags": (Tags, False),
    }


class AutoEvaluationConfiguration(AWSProperty):
    """
    `AutoEvaluationConfiguration <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-evaluationform-autoevaluationconfiguration.html>`__
    """

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


class EvaluationFormItemEnablementSource(AWSProperty):
    """
    `EvaluationFormItemEnablementSource <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-evaluationform-evaluationformitemenablementsource.html>`__
    """

    props: PropsDictType = {
        "RefId": (str, False),
        "Type": (str, True),
    }


class EvaluationFormItemEnablementSourceValue(AWSProperty):
    """
    `EvaluationFormItemEnablementSourceValue <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-evaluationform-evaluationformitemenablementsourcevalue.html>`__
    """

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


class EvaluationFormItemEnablementExpression(AWSProperty):
    """
    `EvaluationFormItemEnablementExpression <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-evaluationform-evaluationformitemenablementexpression.html>`__
    """

    props: PropsDictType = {
        "Comparator": (str, True),
        "Source": (EvaluationFormItemEnablementSource, True),
        "Values": ([EvaluationFormItemEnablementSourceValue], True),
    }


class EvaluationFormItemEnablementConditionOperand(AWSProperty):
    """
    `EvaluationFormItemEnablementConditionOperand <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-evaluationform-evaluationformitemenablementconditionoperand.html>`__
    """

    props: PropsDictType = {
        "Expression": (EvaluationFormItemEnablementExpression, False),
    }


class EvaluationFormItemEnablementCondition(AWSProperty):
    """
    `EvaluationFormItemEnablementCondition <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-evaluationform-evaluationformitemenablementcondition.html>`__
    """

    props: PropsDictType = {
        "Operands": ([EvaluationFormItemEnablementConditionOperand], True),
        "Operator": (str, False),
    }


class EvaluationFormItemEnablementConfiguration(AWSProperty):
    """
    `EvaluationFormItemEnablementConfiguration <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-evaluationform-evaluationformitemenablementconfiguration.html>`__
    """

    props: PropsDictType = {
        "Action": (str, True),
        "Condition": (EvaluationFormItemEnablementCondition, True),
        "DefaultAction": (str, False),
    }


class MultiSelectQuestionRuleCategoryAutomation(AWSProperty):
    """
    `MultiSelectQuestionRuleCategoryAutomation <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-evaluationform-multiselectquestionrulecategoryautomation.html>`__
    """

    props: PropsDictType = {
        "Category": (str, True),
        "Condition": (str, True),
        "OptionRefIds": ([str], True),
    }


class EvaluationFormMultiSelectQuestionAutomationOption(AWSProperty):
    """
    `EvaluationFormMultiSelectQuestionAutomationOption <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-evaluationform-evaluationformmultiselectquestionautomationoption.html>`__
    """

    props: PropsDictType = {
        "RuleCategory": (MultiSelectQuestionRuleCategoryAutomation, True),
    }


class EvaluationFormQuestionAutomationAnswerSource(AWSProperty):
    """
    `EvaluationFormQuestionAutomationAnswerSource <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-evaluationform-evaluationformquestionautomationanswersource.html>`__
    """

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


class EvaluationFormMultiSelectQuestionAutomation(AWSProperty):
    """
    `EvaluationFormMultiSelectQuestionAutomation <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-evaluationform-evaluationformmultiselectquestionautomation.html>`__
    """

    props: PropsDictType = {
        "AnswerSource": (EvaluationFormQuestionAutomationAnswerSource, False),
        "DefaultOptionRefIds": ([str], False),
        "Options": ([EvaluationFormMultiSelectQuestionAutomationOption], True),
    }


class EvaluationFormMultiSelectQuestionOption(AWSProperty):
    """
    `EvaluationFormMultiSelectQuestionOption <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-evaluationform-evaluationformmultiselectquestionoption.html>`__
    """

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


class EvaluationFormMultiSelectQuestionProperties(AWSProperty):
    """
    `EvaluationFormMultiSelectQuestionProperties <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-evaluationform-evaluationformmultiselectquestionproperties.html>`__
    """

    props: PropsDictType = {
        "Automation": (EvaluationFormMultiSelectQuestionAutomation, False),
        "DisplayAs": (str, False),
        "Options": ([EvaluationFormMultiSelectQuestionOption], True),
    }


class NumericQuestionPropertyValueAutomation(AWSProperty):
    """
    `NumericQuestionPropertyValueAutomation <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-evaluationform-numericquestionpropertyvalueautomation.html>`__
    """

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


class EvaluationFormNumericQuestionAutomation(AWSProperty):
    """
    `EvaluationFormNumericQuestionAutomation <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-evaluationform-evaluationformnumericquestionautomation.html>`__
    """

    props: PropsDictType = {
        "AnswerSource": (EvaluationFormQuestionAutomationAnswerSource, False),
        "PropertyValue": (NumericQuestionPropertyValueAutomation, False),
    }


class AutomaticFailConfiguration(AWSProperty):
    """
    `AutomaticFailConfiguration <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-evaluationform-automaticfailconfiguration.html>`__
    """

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


class EvaluationFormNumericQuestionOption(AWSProperty):
    """
    `EvaluationFormNumericQuestionOption <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-evaluationform-evaluationformnumericquestionoption.html>`__
    """

    props: PropsDictType = {
        "AutomaticFail": (boolean, False),
        "AutomaticFailConfiguration": (AutomaticFailConfiguration, False),
        "MaxValue": (integer, True),
        "MinValue": (integer, True),
        "Score": (integer, False),
    }


class EvaluationFormNumericQuestionProperties(AWSProperty):
    """
    `EvaluationFormNumericQuestionProperties <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-evaluationform-evaluationformnumericquestionproperties.html>`__
    """

    props: PropsDictType = {
        "Automation": (EvaluationFormNumericQuestionAutomation, False),
        "MaxValue": (integer, True),
        "MinValue": (integer, True),
        "Options": ([EvaluationFormNumericQuestionOption], False),
    }


class SingleSelectQuestionRuleCategoryAutomation(AWSProperty):
    """
    `SingleSelectQuestionRuleCategoryAutomation <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-evaluationform-singleselectquestionrulecategoryautomation.html>`__
    """

    props: PropsDictType = {
        "Category": (str, True),
        "Condition": (str, True),
        "OptionRefId": (str, True),
    }


class EvaluationFormSingleSelectQuestionAutomationOption(AWSProperty):
    """
    `EvaluationFormSingleSelectQuestionAutomationOption <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-evaluationform-evaluationformsingleselectquestionautomationoption.html>`__
    """

    props: PropsDictType = {
        "RuleCategory": (SingleSelectQuestionRuleCategoryAutomation, True),
    }


class EvaluationFormSingleSelectQuestionAutomation(AWSProperty):
    """
    `EvaluationFormSingleSelectQuestionAutomation <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-evaluationform-evaluationformsingleselectquestionautomation.html>`__
    """

    props: PropsDictType = {
        "AnswerSource": (EvaluationFormQuestionAutomationAnswerSource, False),
        "DefaultOptionRefId": (str, False),
        "Options": ([EvaluationFormSingleSelectQuestionAutomationOption], True),
    }


class EvaluationFormSingleSelectQuestionOption(AWSProperty):
    """
    `EvaluationFormSingleSelectQuestionOption <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-evaluationform-evaluationformsingleselectquestionoption.html>`__
    """

    props: PropsDictType = {
        "AutomaticFail": (boolean, False),
        "AutomaticFailConfiguration": (AutomaticFailConfiguration, False),
        "RefId": (str, True),
        "Score": (integer, False),
        "Text": (str, True),
    }


class EvaluationFormSingleSelectQuestionProperties(AWSProperty):
    """
    `EvaluationFormSingleSelectQuestionProperties <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-evaluationform-evaluationformsingleselectquestionproperties.html>`__
    """

    props: PropsDictType = {
        "Automation": (EvaluationFormSingleSelectQuestionAutomation, False),
        "DisplayAs": (str, False),
        "Options": ([EvaluationFormSingleSelectQuestionOption], True),
    }


class EvaluationFormTextQuestionAutomation(AWSProperty):
    """
    `EvaluationFormTextQuestionAutomation <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-evaluationform-evaluationformtextquestionautomation.html>`__
    """

    props: PropsDictType = {
        "AnswerSource": (EvaluationFormQuestionAutomationAnswerSource, False),
    }


class EvaluationFormTextQuestionProperties(AWSProperty):
    """
    `EvaluationFormTextQuestionProperties <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-evaluationform-evaluationformtextquestionproperties.html>`__
    """

    props: PropsDictType = {
        "Automation": (EvaluationFormTextQuestionAutomation, False),
    }


class EvaluationFormQuestionTypeProperties(AWSProperty):
    """
    `EvaluationFormQuestionTypeProperties <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-evaluationform-evaluationformquestiontypeproperties.html>`__
    """

    props: PropsDictType = {
        "MultiSelect": (EvaluationFormMultiSelectQuestionProperties, False),
        "Numeric": (EvaluationFormNumericQuestionProperties, False),
        "SingleSelect": (EvaluationFormSingleSelectQuestionProperties, False),
        "Text": (EvaluationFormTextQuestionProperties, False),
    }


class EvaluationFormQuestion(AWSProperty):
    """
    `EvaluationFormQuestion <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-evaluationform-evaluationformquestion.html>`__
    """

    props: PropsDictType = {
        "Enablement": (EvaluationFormItemEnablementConfiguration, False),
        "Instructions": (str, False),
        "NotApplicableEnabled": (boolean, False),
        "QuestionType": (str, True),
        "QuestionTypeProperties": (EvaluationFormQuestionTypeProperties, False),
        "RefId": (str, True),
        "Title": (str, True),
        "Weight": (double, False),
    }


class EvaluationFormItem(AWSProperty):
    """
    `EvaluationFormItem <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-evaluationform-evaluationformitem.html>`__
    """

    props: PropsDictType = {
        "Question": (EvaluationFormQuestion, False),
        "Section": (object, False),  # type: ignore
    }


class EvaluationFormSection(AWSProperty):
    """
    `EvaluationFormSection <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-evaluationform-evaluationformsection.html>`__
    """

    props: PropsDictType = {
        "Instructions": (str, False),
        "Items": ([EvaluationFormItem], False),
        "RefId": (str, True),
        "Title": (str, True),
        "Weight": (double, False),
    }


class EvaluationFormBaseItem(AWSProperty):
    """
    `EvaluationFormBaseItem <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-evaluationform-evaluationformbaseitem.html>`__
    """

    props: PropsDictType = {
        "Section": (EvaluationFormSection, True),
    }


class EvaluationFormLanguageConfiguration(AWSProperty):
    """
    `EvaluationFormLanguageConfiguration <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-evaluationform-evaluationformlanguageconfiguration.html>`__
    """

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


class EvaluationFormTargetConfiguration(AWSProperty):
    """
    `EvaluationFormTargetConfiguration <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-evaluationform-evaluationformtargetconfiguration.html>`__
    """

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


class EvaluationReviewNotificationRecipientValue(AWSProperty):
    """
    `EvaluationReviewNotificationRecipientValue <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-evaluationform-evaluationreviewnotificationrecipientvalue.html>`__
    """

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


class EvaluationReviewNotificationRecipient(AWSProperty):
    """
    `EvaluationReviewNotificationRecipient <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-evaluationform-evaluationreviewnotificationrecipient.html>`__
    """

    props: PropsDictType = {
        "Type": (str, True),
        "Value": (EvaluationReviewNotificationRecipientValue, True),
    }


class EvaluationReviewConfiguration(AWSProperty):
    """
    `EvaluationReviewConfiguration <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-evaluationform-evaluationreviewconfiguration.html>`__
    """

    props: PropsDictType = {
        "EligibilityDays": (integer, False),
        "ReviewNotificationRecipients": ([EvaluationReviewNotificationRecipient], True),
    }


class ScoringStrategy(AWSProperty):
    """
    `ScoringStrategy <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-evaluationform-scoringstrategy.html>`__
    """

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


class EvaluationForm(AWSObject):
    """
    `EvaluationForm <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connect-evaluationform.html>`__
    """

    resource_type = "AWS::Connect::EvaluationForm"

    props: PropsDictType = {
        "AutoEvaluationConfiguration": (AutoEvaluationConfiguration, False),
        "Description": (str, False),
        "InstanceArn": (str, True),
        "Items": ([EvaluationFormBaseItem], True),
        "LanguageConfiguration": (EvaluationFormLanguageConfiguration, False),
        "ReviewConfiguration": (EvaluationReviewConfiguration, False),
        "ScoringStrategy": (ScoringStrategy, False),
        "Status": (str, True),
        "Tags": (Tags, False),
        "TargetConfiguration": (EvaluationFormTargetConfiguration, False),
        "Title": (str, True),
    }


class HoursOfOperationTimeSlice(AWSProperty):
    """
    `HoursOfOperationTimeSlice <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-hoursofoperation-hoursofoperationtimeslice.html>`__
    """

    props: PropsDictType = {
        "Hours": (integer, True),
        "Minutes": (integer, True),
    }


class HoursOfOperationConfig(AWSProperty):
    """
    `HoursOfOperationConfig <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-hoursofoperation-hoursofoperationconfig.html>`__
    """

    props: PropsDictType = {
        "Day": (str, True),
        "EndTime": (HoursOfOperationTimeSlice, True),
        "StartTime": (HoursOfOperationTimeSlice, True),
    }


class OverrideTimeSlice(AWSProperty):
    """
    `OverrideTimeSlice <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-hoursofoperation-overridetimeslice.html>`__
    """

    props: PropsDictType = {
        "Hours": (integer, True),
        "Minutes": (integer, True),
    }


class HoursOfOperationOverrideConfig(AWSProperty):
    """
    `HoursOfOperationOverrideConfig <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-hoursofoperation-hoursofoperationoverrideconfig.html>`__
    """

    props: PropsDictType = {
        "Day": (str, True),
        "EndTime": (OverrideTimeSlice, True),
        "StartTime": (OverrideTimeSlice, True),
    }


class RecurrencePattern(AWSProperty):
    """
    `RecurrencePattern <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-hoursofoperation-recurrencepattern.html>`__
    """

    props: PropsDictType = {
        "ByMonth": ([integer], False),
        "ByMonthDay": ([integer], False),
        "ByWeekdayOccurrence": ([integer], False),
        "Frequency": (str, False),
        "Interval": (integer, False),
    }


class RecurrenceConfig(AWSProperty):
    """
    `RecurrenceConfig <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-hoursofoperation-recurrenceconfig.html>`__
    """

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


class HoursOfOperationOverride(AWSProperty):
    """
    `HoursOfOperationOverride <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-hoursofoperation-hoursofoperationoverride.html>`__
    """

    props: PropsDictType = {
        "EffectiveFrom": (str, True),
        "EffectiveTill": (str, True),
        "HoursOfOperationOverrideId": (str, False),
        "OverrideConfig": ([HoursOfOperationOverrideConfig], True),
        "OverrideDescription": (str, False),
        "OverrideName": (str, True),
        "OverrideType": (str, False),
        "RecurrenceConfig": (RecurrenceConfig, False),
    }


class HoursOfOperationsIdentifier(AWSProperty):
    """
    `HoursOfOperationsIdentifier <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-hoursofoperation-hoursofoperationsidentifier.html>`__
    """

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


class HoursOfOperation(AWSObject):
    """
    `HoursOfOperation <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connect-hoursofoperation.html>`__
    """

    resource_type = "AWS::Connect::HoursOfOperation"

    props: PropsDictType = {
        "ChildHoursOfOperations": ([HoursOfOperationsIdentifier], False),
        "Config": ([HoursOfOperationConfig], True),
        "Description": (str, False),
        "HoursOfOperationOverrides": ([HoursOfOperationOverride], False),
        "InstanceArn": (str, True),
        "Name": (str, True),
        "ParentHoursOfOperations": ([HoursOfOperationsIdentifier], False),
        "Tags": (Tags, False),
        "TimeZone": (str, True),
    }


class Attributes(AWSProperty):
    """
    `Attributes <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-instance-attributes.html>`__
    """

    props: PropsDictType = {
        "AutoResolveBestVoices": (boolean, False),
        "ContactLens": (boolean, False),
        "ContactflowLogs": (boolean, False),
        "EarlyMedia": (boolean, False),
        "EnhancedChatMonitoring": (boolean, False),
        "EnhancedContactMonitoring": (boolean, False),
        "HighVolumeOutBound": (boolean, False),
        "InboundCalls": (boolean, True),
        "MessageStreaming": (boolean, False),
        "MultiPartyChatConference": (boolean, False),
        "MultiPartyConference": (boolean, False),
        "OutboundCalls": (boolean, True),
        "UseCustomTTSVoices": (boolean, False),
    }


class Instance(AWSObject):
    """
    `Instance <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connect-instance.html>`__
    """

    resource_type = "AWS::Connect::Instance"

    props: PropsDictType = {
        "Attributes": (Attributes, True),
        "DirectoryId": (str, False),
        "IdentityManagementType": (str, True),
        "InstanceAlias": (str, False),
        "Tags": (Tags, False),
    }


class KinesisFirehoseConfig(AWSProperty):
    """
    `KinesisFirehoseConfig <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-instancestorageconfig-kinesisfirehoseconfig.html>`__
    """

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


class KinesisStreamConfig(AWSProperty):
    """
    `KinesisStreamConfig <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-instancestorageconfig-kinesisstreamconfig.html>`__
    """

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


class EncryptionConfig(AWSProperty):
    """
    `EncryptionConfig <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-instancestorageconfig-encryptionconfig.html>`__
    """

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


class KinesisVideoStreamConfig(AWSProperty):
    """
    `KinesisVideoStreamConfig <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-instancestorageconfig-kinesisvideostreamconfig.html>`__
    """

    props: PropsDictType = {
        "EncryptionConfig": (EncryptionConfig, True),
        "Prefix": (str, True),
        "RetentionPeriodHours": (double, True),
    }


class S3Config(AWSProperty):
    """
    `S3Config <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-instancestorageconfig-s3config.html>`__
    """

    props: PropsDictType = {
        "BucketName": (str, True),
        "BucketPrefix": (str, True),
        "EncryptionConfig": (EncryptionConfig, False),
    }


class InstanceStorageConfig(AWSObject):
    """
    `InstanceStorageConfig <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connect-instancestorageconfig.html>`__
    """

    resource_type = "AWS::Connect::InstanceStorageConfig"

    props: PropsDictType = {
        "InstanceArn": (str, True),
        "KinesisFirehoseConfig": (KinesisFirehoseConfig, False),
        "KinesisStreamConfig": (KinesisStreamConfig, False),
        "KinesisVideoStreamConfig": (KinesisVideoStreamConfig, False),
        "ResourceType": (str, True),
        "S3Config": (S3Config, False),
        "StorageType": (str, True),
    }


class IntegrationAssociation(AWSObject):
    """
    `IntegrationAssociation <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connect-integrationassociation.html>`__
    """

    resource_type = "AWS::Connect::IntegrationAssociation"

    props: PropsDictType = {
        "InstanceId": (str, True),
        "IntegrationArn": (str, True),
        "IntegrationType": (str, True),
    }


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

    resource_type = "AWS::Connect::PhoneNumber"

    props: PropsDictType = {
        "CountryCode": (str, False),
        "Description": (str, False),
        "Prefix": (str, False),
        "SourcePhoneNumberArn": (str, False),
        "Tags": (Tags, False),
        "TargetArn": (str, True),
        "Type": (str, False),
    }


class AttributeConfiguration(AWSProperty):
    """
    `AttributeConfiguration <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-predefinedattribute-attributeconfiguration.html>`__
    """

    props: PropsDictType = {
        "EnableValueValidationOnAssociation": (boolean, False),
        "IsReadOnly": (boolean, False),
    }


class Values(AWSProperty):
    """
    `Values <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-predefinedattribute-values.html>`__
    """

    props: PropsDictType = {
        "StringList": ([str], False),
    }


class PredefinedAttribute(AWSObject):
    """
    `PredefinedAttribute <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connect-predefinedattribute.html>`__
    """

    resource_type = "AWS::Connect::PredefinedAttribute"

    props: PropsDictType = {
        "AttributeConfiguration": (AttributeConfiguration, False),
        "InstanceArn": (str, True),
        "Name": (str, True),
        "Purposes": ([str], False),
        "Values": (Values, False),
    }


class Prompt(AWSObject):
    """
    `Prompt <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connect-prompt.html>`__
    """

    resource_type = "AWS::Connect::Prompt"

    props: PropsDictType = {
        "Description": (str, False),
        "InstanceArn": (str, True),
        "Name": (str, True),
        "S3Uri": (str, False),
        "Tags": (Tags, False),
    }


class OutboundCallerConfig(AWSProperty):
    """
    `OutboundCallerConfig <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-queue-outboundcallerconfig.html>`__
    """

    props: PropsDictType = {
        "OutboundCallerIdName": (str, False),
        "OutboundCallerIdNumberArn": (str, False),
        "OutboundFlowArn": (str, False),
    }


class OutboundEmailConfig(AWSProperty):
    """
    `OutboundEmailConfig <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-queue-outboundemailconfig.html>`__
    """

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


class Queue(AWSObject):
    """
    `Queue <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connect-queue.html>`__
    """

    resource_type = "AWS::Connect::Queue"

    props: PropsDictType = {
        "Description": (str, False),
        "HoursOfOperationArn": (str, True),
        "InstanceArn": (str, True),
        "MaxContacts": (integer, False),
        "Name": (str, True),
        "OutboundCallerConfig": (OutboundCallerConfig, False),
        "OutboundEmailConfig": (OutboundEmailConfig, False),
        "QuickConnectArns": ([str], False),
        "Status": (str, False),
        "Tags": (Tags, False),
    }


class PhoneNumberQuickConnectConfig(AWSProperty):
    """
    `PhoneNumberQuickConnectConfig <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-quickconnect-phonenumberquickconnectconfig.html>`__
    """

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


class QueueQuickConnectConfig(AWSProperty):
    """
    `QueueQuickConnectConfig <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-quickconnect-queuequickconnectconfig.html>`__
    """

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


class UserQuickConnectConfig(AWSProperty):
    """
    `UserQuickConnectConfig <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-quickconnect-userquickconnectconfig.html>`__
    """

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


class QuickConnectConfig(AWSProperty):
    """
    `QuickConnectConfig <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-quickconnect-quickconnectconfig.html>`__
    """

    props: PropsDictType = {
        "PhoneConfig": (PhoneNumberQuickConnectConfig, False),
        "QueueConfig": (QueueQuickConnectConfig, False),
        "QuickConnectType": (str, True),
        "UserConfig": (UserQuickConnectConfig, False),
    }


class QuickConnect(AWSObject):
    """
    `QuickConnect <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connect-quickconnect.html>`__
    """

    resource_type = "AWS::Connect::QuickConnect"

    props: PropsDictType = {
        "Description": (str, False),
        "InstanceArn": (str, True),
        "Name": (str, True),
        "QuickConnectConfig": (QuickConnectConfig, True),
        "Tags": (Tags, False),
    }


class CrossChannelBehavior(AWSProperty):
    """
    `CrossChannelBehavior <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-routingprofile-crosschannelbehavior.html>`__
    """

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


class MediaConcurrency(AWSProperty):
    """
    `MediaConcurrency <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-routingprofile-mediaconcurrency.html>`__
    """

    props: PropsDictType = {
        "Channel": (str, True),
        "Concurrency": (integer, True),
        "CrossChannelBehavior": (CrossChannelBehavior, False),
    }


class RoutingProfileQueueReference(AWSProperty):
    """
    `RoutingProfileQueueReference <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-routingprofile-routingprofilequeuereference.html>`__
    """

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


class RoutingProfileManualAssignmentQueueConfig(AWSProperty):
    """
    `RoutingProfileManualAssignmentQueueConfig <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-routingprofile-routingprofilemanualassignmentqueueconfig.html>`__
    """

    props: PropsDictType = {
        "QueueReference": (RoutingProfileQueueReference, True),
    }


class RoutingProfileQueueConfig(AWSProperty):
    """
    `RoutingProfileQueueConfig <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-routingprofile-routingprofilequeueconfig.html>`__
    """

    props: PropsDictType = {
        "Delay": (integer, True),
        "Priority": (integer, True),
        "QueueReference": (RoutingProfileQueueReference, True),
    }


class RoutingProfile(AWSObject):
    """
    `RoutingProfile <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connect-routingprofile.html>`__
    """

    resource_type = "AWS::Connect::RoutingProfile"

    props: PropsDictType = {
        "AgentAvailabilityTimer": (str, False),
        "DefaultOutboundQueueArn": (str, True),
        "Description": (str, True),
        "InstanceArn": (str, True),
        "ManualAssignmentQueueConfigs": (
            [RoutingProfileManualAssignmentQueueConfig],
            False,
        ),
        "MediaConcurrencies": ([MediaConcurrency], True),
        "Name": (str, True),
        "QueueConfigs": ([RoutingProfileQueueConfig], False),
        "Tags": (Tags, False),
    }


class FieldIdentifier(AWSProperty):
    """
    `FieldIdentifier <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-tasktemplate-fieldidentifier.html>`__
    """

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


class Field(AWSProperty):
    """
    `Field <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-tasktemplate-field.html>`__
    """

    props: PropsDictType = {
        "Description": (str, False),
        "Id": (FieldIdentifier, True),
        "SingleSelectOptions": ([str], False),
        "Type": (str, True),
    }


class CreateCaseAction(AWSProperty):
    """
    `CreateCaseAction <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-rule-createcaseaction.html>`__
    """

    props: PropsDictType = {
        "Fields": ([Field], True),
        "TemplateId": (str, True),
    }


class EventBridgeAction(AWSProperty):
    """
    `EventBridgeAction <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-rule-eventbridgeaction.html>`__
    """

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


class NotificationRecipientType(AWSProperty):
    """
    `NotificationRecipientType <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-rule-notificationrecipienttype.html>`__
    """

    props: PropsDictType = {
        "UserArns": ([str], False),
        "UserTags": (dict, False),
    }


class SendNotificationAction(AWSProperty):
    """
    `SendNotificationAction <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-rule-sendnotificationaction.html>`__
    """

    props: PropsDictType = {
        "Content": (str, True),
        "ContentType": (str, True),
        "DeliveryMethod": (str, True),
        "Recipient": (NotificationRecipientType, True),
        "Subject": (str, False),
    }


class SubmitAutoEvaluationAction(AWSProperty):
    """
    `SubmitAutoEvaluationAction <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-rule-submitautoevaluationaction.html>`__
    """

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


class Reference(AWSProperty):
    """
    `Reference <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-rule-reference.html>`__
    """

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


class TaskAction(AWSProperty):
    """
    `TaskAction <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-rule-taskaction.html>`__
    """

    props: PropsDictType = {
        "ContactFlowArn": (str, True),
        "Description": (str, False),
        "Name": (str, True),
        "References": (dict, False),
    }


class UpdateCaseAction(AWSProperty):
    """
    `UpdateCaseAction <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-rule-updatecaseaction.html>`__
    """

    props: PropsDictType = {
        "Fields": ([Field], True),
    }


class Actions(AWSProperty):
    """
    `Actions <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-rule-actions.html>`__
    """

    props: PropsDictType = {
        "AssignContactCategoryActions": (Tags, False),
        "CreateCaseActions": ([CreateCaseAction], False),
        "EndAssociatedTasksActions": (Tags, False),
        "EventBridgeActions": ([EventBridgeAction], False),
        "SendNotificationActions": ([SendNotificationAction], False),
        "SubmitAutoEvaluationActions": ([SubmitAutoEvaluationAction], False),
        "TaskActions": ([TaskAction], False),
        "UpdateCaseActions": ([UpdateCaseAction], False),
    }


class RuleTriggerEventSource(AWSProperty):
    """
    `RuleTriggerEventSource <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-rule-ruletriggereventsource.html>`__
    """

    props: PropsDictType = {
        "EventSourceName": (str, True),
        "IntegrationAssociationArn": (str, False),
    }


class Rule(AWSObject):
    """
    `Rule <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connect-rule.html>`__
    """

    resource_type = "AWS::Connect::Rule"

    props: PropsDictType = {
        "Actions": (Actions, True),
        "Function": (str, True),
        "InstanceArn": (str, True),
        "Name": (str, True),
        "PublishStatus": (str, True),
        "Tags": (Tags, False),
        "TriggerEventSource": (RuleTriggerEventSource, True),
    }


class SecurityKey(AWSObject):
    """
    `SecurityKey <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connect-securitykey.html>`__
    """

    resource_type = "AWS::Connect::SecurityKey"

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


class Application(AWSProperty):
    """
    `Application <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-securityprofile-application.html>`__
    """

    props: PropsDictType = {
        "ApplicationPermissions": ([str], True),
        "Namespace": (str, True),
    }


class PrimaryAttributeValue(AWSProperty):
    """
    `PrimaryAttributeValue <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-securityprofile-primaryattributevalue.html>`__
    """

    props: PropsDictType = {
        "AccessType": (str, True),
        "AttributeName": (str, True),
        "Values": ([str], True),
    }


class PrimaryAttributeAccessControlConfigurationItem(AWSProperty):
    """
    `PrimaryAttributeAccessControlConfigurationItem <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-securityprofile-primaryattributeaccesscontrolconfigurationitem.html>`__
    """

    props: PropsDictType = {
        "PrimaryAttributeValues": ([PrimaryAttributeValue], True),
    }


class DataTableAccessControlConfiguration(AWSProperty):
    """
    `DataTableAccessControlConfiguration <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-securityprofile-datatableaccesscontrolconfiguration.html>`__
    """

    props: PropsDictType = {
        "PrimaryAttributeAccessControlConfiguration": (
            PrimaryAttributeAccessControlConfigurationItem,
            False,
        ),
    }


class GranularAccessControlConfiguration(AWSProperty):
    """
    `GranularAccessControlConfiguration <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-securityprofile-granularaccesscontrolconfiguration.html>`__
    """

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


class SecurityProfile(AWSObject):
    """
    `SecurityProfile <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connect-securityprofile.html>`__
    """

    resource_type = "AWS::Connect::SecurityProfile"

    props: PropsDictType = {
        "AllowedAccessControlHierarchyGroupId": (str, False),
        "AllowedAccessControlTags": (Tags, False),
        "Applications": ([Application], False),
        "Description": (str, False),
        "GranularAccessControlConfiguration": (
            GranularAccessControlConfiguration,
            False,
        ),
        "HierarchyRestrictedResources": ([str], False),
        "InstanceArn": (str, True),
        "Permissions": ([str], False),
        "SecurityProfileName": (str, True),
        "TagRestrictedResources": ([str], False),
        "Tags": (Tags, False),
    }


class InvisibleFieldInfo(AWSProperty):
    """
    `InvisibleFieldInfo <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-tasktemplate-invisiblefieldinfo.html>`__
    """

    props: PropsDictType = {
        "Id": (FieldIdentifier, True),
    }


class ReadOnlyFieldInfo(AWSProperty):
    """
    `ReadOnlyFieldInfo <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-tasktemplate-readonlyfieldinfo.html>`__
    """

    props: PropsDictType = {
        "Id": (FieldIdentifier, True),
    }


class RequiredFieldInfo(AWSProperty):
    """
    `RequiredFieldInfo <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-tasktemplate-requiredfieldinfo.html>`__
    """

    props: PropsDictType = {
        "Id": (FieldIdentifier, True),
    }


class Constraints(AWSProperty):
    """
    `Constraints <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-tasktemplate-constraints.html>`__
    """

    props: PropsDictType = {
        "InvisibleFields": ([InvisibleFieldInfo], False),
        "ReadOnlyFields": ([ReadOnlyFieldInfo], False),
        "RequiredFields": ([RequiredFieldInfo], False),
    }


class DefaultFieldValue(AWSProperty):
    """
    `DefaultFieldValue <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-tasktemplate-defaultfieldvalue.html>`__
    """

    props: PropsDictType = {
        "DefaultValue": (str, True),
        "Id": (FieldIdentifier, True),
    }


class TaskTemplate(AWSObject):
    """
    `TaskTemplate <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connect-tasktemplate.html>`__
    """

    resource_type = "AWS::Connect::TaskTemplate"

    props: PropsDictType = {
        "ClientToken": (str, False),
        "Constraints": (Constraints, False),
        "ContactFlowArn": (str, False),
        "Defaults": ([DefaultFieldValue], False),
        "Description": (str, False),
        "Fields": ([Field], False),
        "InstanceArn": (str, True),
        "Name": (str, False),
        "SelfAssignContactFlowArn": (str, False),
        "Status": (str, False),
        "Tags": (Tags, False),
    }


class TrafficDistributionGroup(AWSObject):
    """
    `TrafficDistributionGroup <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connect-trafficdistributiongroup.html>`__
    """

    resource_type = "AWS::Connect::TrafficDistributionGroup"

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


class AfterContactWorkConfig(AWSProperty):
    """
    `AfterContactWorkConfig <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-user-aftercontactworkconfig.html>`__
    """

    props: PropsDictType = {
        "AfterContactWorkTimeLimit": (integer, False),
    }


class AfterContactWorkConfigPerChannel(AWSProperty):
    """
    `AfterContactWorkConfigPerChannel <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-user-aftercontactworkconfigperchannel.html>`__
    """

    props: PropsDictType = {
        "AfterContactWorkConfig": (AfterContactWorkConfig, True),
        "AgentFirstCallbackAfterContactWorkConfig": (AfterContactWorkConfig, False),
        "Channel": (str, True),
    }


class AutoAcceptConfig(AWSProperty):
    """
    `AutoAcceptConfig <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-user-autoacceptconfig.html>`__
    """

    props: PropsDictType = {
        "AgentFirstCallbackAutoAccept": (boolean, False),
        "AutoAccept": (boolean, True),
        "Channel": (str, True),
    }


class PersistentConnectionConfig(AWSProperty):
    """
    `PersistentConnectionConfig <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-user-persistentconnectionconfig.html>`__
    """

    props: PropsDictType = {
        "Channel": (str, True),
        "PersistentConnection": (boolean, True),
    }


class PhoneNumberConfig(AWSProperty):
    """
    `PhoneNumberConfig <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-user-phonenumberconfig.html>`__
    """

    props: PropsDictType = {
        "Channel": (str, True),
        "PhoneNumber": (str, False),
        "PhoneType": (str, True),
    }


class UserIdentityInfo(AWSProperty):
    """
    `UserIdentityInfo <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-user-useridentityinfo.html>`__
    """

    props: PropsDictType = {
        "Email": (str, False),
        "FirstName": (str, False),
        "LastName": (str, False),
        "Mobile": (str, False),
        "SecondaryEmail": (str, False),
    }


class UserPhoneConfig(AWSProperty):
    """
    `UserPhoneConfig <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-user-userphoneconfig.html>`__
    """

    props: PropsDictType = {
        "AfterContactWorkTimeLimit": (integer, False),
        "AutoAccept": (boolean, False),
        "DeskPhoneNumber": (str, False),
        "PersistentConnection": (boolean, False),
        "PhoneType": (str, False),
    }


class UserProficiency(AWSProperty):
    """
    `UserProficiency <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-user-userproficiency.html>`__
    """

    props: PropsDictType = {
        "AttributeName": (str, True),
        "AttributeValue": (str, True),
        "Level": (double, True),
    }


class VoiceEnhancementConfig(AWSProperty):
    """
    `VoiceEnhancementConfig <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-user-voiceenhancementconfig.html>`__
    """

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


class User(AWSObject):
    """
    `User <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connect-user.html>`__
    """

    resource_type = "AWS::Connect::User"

    props: PropsDictType = {
        "AfterContactWorkConfigs": ([AfterContactWorkConfigPerChannel], False),
        "AutoAcceptConfigs": ([AutoAcceptConfig], False),
        "DirectoryUserId": (str, False),
        "HierarchyGroupArn": (str, False),
        "IdentityInfo": (UserIdentityInfo, False),
        "InstanceArn": (str, True),
        "Password": (str, False),
        "PersistentConnectionConfigs": ([PersistentConnectionConfig], False),
        "PhoneConfig": (UserPhoneConfig, False),
        "PhoneNumberConfigs": ([PhoneNumberConfig], False),
        "RoutingProfileArn": (str, True),
        "SecurityProfileArns": ([str], True),
        "Tags": (Tags, False),
        "UserProficiencies": ([UserProficiency], False),
        "Username": (str, True),
        "VoiceEnhancementConfigs": ([VoiceEnhancementConfig], False),
    }


class UserHierarchyGroup(AWSObject):
    """
    `UserHierarchyGroup <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connect-userhierarchygroup.html>`__
    """

    resource_type = "AWS::Connect::UserHierarchyGroup"

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


class LevelFive(AWSProperty):
    """
    `LevelFive <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-userhierarchystructure-levelfive.html>`__
    """

    props: PropsDictType = {
        "HierarchyLevelArn": (str, False),
        "HierarchyLevelId": (str, False),
        "Name": (str, True),
    }


class LevelFour(AWSProperty):
    """
    `LevelFour <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-userhierarchystructure-levelfour.html>`__
    """

    props: PropsDictType = {
        "HierarchyLevelArn": (str, False),
        "HierarchyLevelId": (str, False),
        "Name": (str, True),
    }


class LevelOne(AWSProperty):
    """
    `LevelOne <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-userhierarchystructure-levelone.html>`__
    """

    props: PropsDictType = {
        "HierarchyLevelArn": (str, False),
        "HierarchyLevelId": (str, False),
        "Name": (str, True),
    }


class LevelThree(AWSProperty):
    """
    `LevelThree <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-userhierarchystructure-levelthree.html>`__
    """

    props: PropsDictType = {
        "HierarchyLevelArn": (str, False),
        "HierarchyLevelId": (str, False),
        "Name": (str, True),
    }


class LevelTwo(AWSProperty):
    """
    `LevelTwo <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-userhierarchystructure-leveltwo.html>`__
    """

    props: PropsDictType = {
        "HierarchyLevelArn": (str, False),
        "HierarchyLevelId": (str, False),
        "Name": (str, True),
    }


class UserHierarchyStructureProperty(AWSProperty):
    """
    `UserHierarchyStructureProperty <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-userhierarchystructure-userhierarchystructure.html>`__
    """

    props: PropsDictType = {
        "LevelFive": (LevelFive, False),
        "LevelFour": (LevelFour, False),
        "LevelOne": (LevelOne, False),
        "LevelThree": (LevelThree, False),
        "LevelTwo": (LevelTwo, False),
    }


class UserHierarchyStructure(AWSObject):
    """
    `UserHierarchyStructure <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connect-userhierarchystructure.html>`__
    """

    resource_type = "AWS::Connect::UserHierarchyStructure"

    props: PropsDictType = {
        "InstanceArn": (str, True),
        "UserHierarchyStructure": (UserHierarchyStructureProperty, False),
    }


class View(AWSObject):
    """
    `View <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connect-view.html>`__
    """

    resource_type = "AWS::Connect::View"

    props: PropsDictType = {
        "Actions": ([str], True),
        "Description": (str, False),
        "InstanceArn": (str, True),
        "Name": (str, True),
        "Tags": (Tags, False),
        "Template": (dict, True),
    }


class ViewVersion(AWSObject):
    """
    `ViewVersion <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connect-viewversion.html>`__
    """

    resource_type = "AWS::Connect::ViewVersion"

    props: PropsDictType = {
        "VersionDescription": (str, False),
        "ViewArn": (str, True),
        "ViewContentSha256": (str, False),
    }


class MediaItem(AWSProperty):
    """
    `MediaItem <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-workspace-mediaitem.html>`__
    """

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


class WorkspacePage(AWSProperty):
    """
    `WorkspacePage <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-workspace-workspacepage.html>`__
    """

    props: PropsDictType = {
        "InputData": (str, False),
        "Page": (str, True),
        "ResourceArn": (str, True),
        "Slug": (str, False),
    }


class PaletteCanvas(AWSProperty):
    """
    `PaletteCanvas <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-workspace-palettecanvas.html>`__
    """

    props: PropsDictType = {
        "ActiveBackground": (str, False),
        "ContainerBackground": (str, False),
        "PageBackground": (str, False),
    }


class PaletteHeader(AWSProperty):
    """
    `PaletteHeader <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-workspace-paletteheader.html>`__
    """

    props: PropsDictType = {
        "Background": (str, False),
        "InvertActionsColors": (boolean, False),
        "Text": (str, False),
        "TextHover": (str, False),
    }


class PaletteNavigation(AWSProperty):
    """
    `PaletteNavigation <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-workspace-palettenavigation.html>`__
    """

    props: PropsDictType = {
        "Background": (str, False),
        "InvertActionsColors": (boolean, False),
        "Text": (str, False),
        "TextActive": (str, False),
        "TextBackgroundActive": (str, False),
        "TextBackgroundHover": (str, False),
        "TextHover": (str, False),
    }


class PalettePrimary(AWSProperty):
    """
    `PalettePrimary <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-workspace-paletteprimary.html>`__
    """

    props: PropsDictType = {
        "Active": (str, False),
        "ContrastText": (str, False),
        "Default": (str, False),
    }


class WorkspaceThemePalette(AWSProperty):
    """
    `WorkspaceThemePalette <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-workspace-workspacethemepalette.html>`__
    """

    props: PropsDictType = {
        "Canvas": (PaletteCanvas, False),
        "Header": (PaletteHeader, False),
        "Navigation": (PaletteNavigation, False),
        "Primary": (PalettePrimary, False),
    }


class FontFamily(AWSProperty):
    """
    `FontFamily <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-workspace-fontfamily.html>`__
    """

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


class WorkspaceThemeTypography(AWSProperty):
    """
    `WorkspaceThemeTypography <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-workspace-workspacethemetypography.html>`__
    """

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


class WorkspaceThemeConfig(AWSProperty):
    """
    `WorkspaceThemeConfig <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-workspace-workspacethemeconfig.html>`__
    """

    props: PropsDictType = {
        "Palette": (WorkspaceThemePalette, False),
        "Typography": (WorkspaceThemeTypography, False),
    }


class WorkspaceTheme(AWSProperty):
    """
    `WorkspaceTheme <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-workspace-workspacetheme.html>`__
    """

    props: PropsDictType = {
        "Dark": (WorkspaceThemeConfig, False),
        "Light": (WorkspaceThemeConfig, False),
    }


class Workspace(AWSObject):
    """
    `Workspace <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-connect-workspace.html>`__
    """

    resource_type = "AWS::Connect::Workspace"

    props: PropsDictType = {
        "Associations": ([str], False),
        "Description": (str, False),
        "InstanceArn": (str, True),
        "Media": ([MediaItem], False),
        "Name": (str, True),
        "Pages": ([WorkspacePage], False),
        "Tags": (Tags, False),
        "Theme": (WorkspaceTheme, False),
        "Title": (str, False),
        "Visibility": (str, False),
    }


class FieldValue(AWSProperty):
    """
    `FieldValue <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-rule-fieldvalue.html>`__
    """

    props: PropsDictType = {
        "BooleanValue": (boolean, False),
        "DoubleValue": (double, False),
        "EmptyValue": (dict, False),
        "StringValue": (str, False),
    }


class LockVersion(AWSProperty):
    """
    `LockVersion <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-connect-datatableattribute-lockversion.html>`__
    """

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