# Copyright (c) 2012-2022, 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


class AnalysisParameter(AWSProperty):
    """
    `AnalysisParameter <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-analysistemplate-analysisparameter.html>`__
    """

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


class AnalysisSource(AWSProperty):
    """
    `AnalysisSource <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-analysistemplate-analysissource.html>`__
    """

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


class AnalysisTemplate(AWSObject):
    """
    `AnalysisTemplate <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-analysistemplate.html>`__
    """

    resource_type = "AWS::CleanRooms::AnalysisTemplate"

    props: PropsDictType = {
        "AnalysisParameters": ([AnalysisParameter], False),
        "Description": (str, False),
        "Format": (str, True),
        "MembershipIdentifier": (str, True),
        "Name": (str, True),
        "Source": (AnalysisSource, True),
        "Tags": (Tags, False),
    }


class DataEncryptionMetadata(AWSProperty):
    """
    `DataEncryptionMetadata <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-collaboration-dataencryptionmetadata.html>`__
    """

    props: PropsDictType = {
        "AllowCleartext": (boolean, True),
        "AllowDuplicates": (boolean, True),
        "AllowJoinsOnColumnsWithDifferentNames": (boolean, True),
        "PreserveNulls": (boolean, True),
    }


class QueryComputePaymentConfig(AWSProperty):
    """
    `QueryComputePaymentConfig <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-collaboration-querycomputepaymentconfig.html>`__
    """

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


class PaymentConfiguration(AWSProperty):
    """
    `PaymentConfiguration <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-collaboration-paymentconfiguration.html>`__
    """

    props: PropsDictType = {
        "QueryCompute": (QueryComputePaymentConfig, True),
    }


class MemberSpecification(AWSProperty):
    """
    `MemberSpecification <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-collaboration-memberspecification.html>`__
    """

    props: PropsDictType = {
        "AccountId": (str, True),
        "DisplayName": (str, True),
        "MemberAbilities": ([str], True),
        "PaymentConfiguration": (PaymentConfiguration, False),
    }


class Collaboration(AWSObject):
    """
    `Collaboration <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-collaboration.html>`__
    """

    resource_type = "AWS::CleanRooms::Collaboration"

    props: PropsDictType = {
        "CreatorDisplayName": (str, True),
        "CreatorMemberAbilities": ([str], True),
        "CreatorPaymentConfiguration": (PaymentConfiguration, False),
        "DataEncryptionMetadata": (DataEncryptionMetadata, False),
        "Description": (str, True),
        "Members": ([MemberSpecification], True),
        "Name": (str, True),
        "QueryLogStatus": (str, True),
        "Tags": (Tags, False),
    }


class AggregateColumn(AWSProperty):
    """
    `AggregateColumn <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-aggregatecolumn.html>`__
    """

    props: PropsDictType = {
        "ColumnNames": ([str], True),
        "Function": (str, True),
    }


class AggregationConstraint(AWSProperty):
    """
    `AggregationConstraint <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-aggregationconstraint.html>`__
    """

    props: PropsDictType = {
        "ColumnName": (str, True),
        "Minimum": (double, True),
        "Type": (str, True),
    }


class AnalysisRuleAggregation(AWSProperty):
    """
    `AnalysisRuleAggregation <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-analysisruleaggregation.html>`__
    """

    props: PropsDictType = {
        "AggregateColumns": ([AggregateColumn], True),
        "AllowedJoinOperators": ([str], False),
        "DimensionColumns": ([str], True),
        "JoinColumns": ([str], True),
        "JoinRequired": (str, False),
        "OutputConstraints": ([AggregationConstraint], True),
        "ScalarFunctions": ([str], True),
    }


class AnalysisRuleCustom(AWSProperty):
    """
    `AnalysisRuleCustom <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-analysisrulecustom.html>`__
    """

    props: PropsDictType = {
        "AllowedAnalyses": ([str], True),
        "AllowedAnalysisProviders": ([str], False),
    }


class AnalysisRuleList(AWSProperty):
    """
    `AnalysisRuleList <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-analysisrulelist.html>`__
    """

    props: PropsDictType = {
        "AllowedJoinOperators": ([str], False),
        "JoinColumns": ([str], True),
        "ListColumns": ([str], True),
    }


class ConfiguredTableAnalysisRulePolicyV1(AWSProperty):
    """
    `ConfiguredTableAnalysisRulePolicyV1 <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-configuredtableanalysisrulepolicyv1.html>`__
    """

    props: PropsDictType = {
        "Aggregation": (AnalysisRuleAggregation, False),
        "Custom": (AnalysisRuleCustom, False),
        "List": (AnalysisRuleList, False),
    }


class ConfiguredTableAnalysisRulePolicy(AWSProperty):
    """
    `ConfiguredTableAnalysisRulePolicy <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-configuredtableanalysisrulepolicy.html>`__
    """

    props: PropsDictType = {
        "V1": (ConfiguredTableAnalysisRulePolicyV1, True),
    }


class AnalysisRule(AWSProperty):
    """
    `AnalysisRule <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-analysisrule.html>`__
    """

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


class GlueTableReference(AWSProperty):
    """
    `GlueTableReference <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-gluetablereference.html>`__
    """

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


class TableReference(AWSProperty):
    """
    `TableReference <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-configuredtable-tablereference.html>`__
    """

    props: PropsDictType = {
        "Glue": (GlueTableReference, True),
    }


class ConfiguredTable(AWSObject):
    """
    `ConfiguredTable <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-configuredtable.html>`__
    """

    resource_type = "AWS::CleanRooms::ConfiguredTable"

    props: PropsDictType = {
        "AllowedColumns": ([str], True),
        "AnalysisMethod": (str, True),
        "AnalysisRules": ([AnalysisRule], False),
        "Description": (str, False),
        "Name": (str, True),
        "TableReference": (TableReference, True),
        "Tags": (Tags, False),
    }


class ConfiguredTableAssociation(AWSObject):
    """
    `ConfiguredTableAssociation <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-configuredtableassociation.html>`__
    """

    resource_type = "AWS::CleanRooms::ConfiguredTableAssociation"

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


class MembershipQueryComputePaymentConfig(AWSProperty):
    """
    `MembershipQueryComputePaymentConfig <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-membership-membershipquerycomputepaymentconfig.html>`__
    """

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


class MembershipPaymentConfiguration(AWSProperty):
    """
    `MembershipPaymentConfiguration <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-membership-membershippaymentconfiguration.html>`__
    """

    props: PropsDictType = {
        "QueryCompute": (MembershipQueryComputePaymentConfig, True),
    }


class ProtectedQueryS3OutputConfiguration(AWSProperty):
    """
    `ProtectedQueryS3OutputConfiguration <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-membership-protectedquerys3outputconfiguration.html>`__
    """

    props: PropsDictType = {
        "Bucket": (str, True),
        "KeyPrefix": (str, False),
        "ResultFormat": (str, True),
    }


class MembershipProtectedQueryOutputConfiguration(AWSProperty):
    """
    `MembershipProtectedQueryOutputConfiguration <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-membership-membershipprotectedqueryoutputconfiguration.html>`__
    """

    props: PropsDictType = {
        "S3": (ProtectedQueryS3OutputConfiguration, True),
    }


class MembershipProtectedQueryResultConfiguration(AWSProperty):
    """
    `MembershipProtectedQueryResultConfiguration <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-membership-membershipprotectedqueryresultconfiguration.html>`__
    """

    props: PropsDictType = {
        "OutputConfiguration": (MembershipProtectedQueryOutputConfiguration, True),
        "RoleArn": (str, False),
    }


class Membership(AWSObject):
    """
    `Membership <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cleanrooms-membership.html>`__
    """

    resource_type = "AWS::CleanRooms::Membership"

    props: PropsDictType = {
        "CollaborationIdentifier": (str, True),
        "DefaultResultConfiguration": (
            MembershipProtectedQueryResultConfiguration,
            False,
        ),
        "PaymentConfiguration": (MembershipPaymentConfiguration, False),
        "QueryLogStatus": (str, True),
        "Tags": (Tags, False),
    }


class AnalysisSchema(AWSProperty):
    """
    `AnalysisSchema <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cleanrooms-analysistemplate-analysisschema.html>`__
    """

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