# 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
from .validators import boolean, integer


class Namespace(AWSObject):
    """
    `Namespace <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-s3tables-namespace.html>`__
    """

    resource_type = "AWS::S3Tables::Namespace"

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


class Compaction(AWSProperty):
    """
    `Compaction <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3tables-table-compaction.html>`__
    """

    props: PropsDictType = {
        "Status": (str, False),
        "TargetFileSizeMB": (integer, False),
    }


class SchemaField(AWSProperty):
    """
    `SchemaField <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3tables-table-schemafield.html>`__
    """

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


class IcebergSchema(AWSProperty):
    """
    `IcebergSchema <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3tables-table-icebergschema.html>`__
    """

    props: PropsDictType = {
        "SchemaFieldList": ([SchemaField], True),
    }


class IcebergMetadata(AWSProperty):
    """
    `IcebergMetadata <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3tables-table-icebergmetadata.html>`__
    """

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


class SnapshotManagement(AWSProperty):
    """
    `SnapshotManagement <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3tables-table-snapshotmanagement.html>`__
    """

    props: PropsDictType = {
        "MaxSnapshotAgeHours": (integer, False),
        "MinSnapshotsToKeep": (integer, False),
        "Status": (str, False),
    }


class Table(AWSObject):
    """
    `Table <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-s3tables-table.html>`__
    """

    resource_type = "AWS::S3Tables::Table"

    props: PropsDictType = {
        "Compaction": (Compaction, False),
        "IcebergMetadata": (IcebergMetadata, False),
        "Namespace": (str, True),
        "OpenTableFormat": (str, True),
        "SnapshotManagement": (SnapshotManagement, False),
        "TableBucketARN": (str, True),
        "TableName": (str, True),
        "WithoutMetadata": (str, False),
    }


class EncryptionConfiguration(AWSProperty):
    """
    `EncryptionConfiguration <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3tables-tablebucket-encryptionconfiguration.html>`__
    """

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


class UnreferencedFileRemoval(AWSProperty):
    """
    `UnreferencedFileRemoval <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3tables-tablebucket-unreferencedfileremoval.html>`__
    """

    props: PropsDictType = {
        "NoncurrentDays": (integer, False),
        "Status": (str, False),
        "UnreferencedDays": (integer, False),
    }


class TableBucket(AWSObject):
    """
    `TableBucket <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-s3tables-tablebucket.html>`__
    """

    resource_type = "AWS::S3Tables::TableBucket"

    props: PropsDictType = {
        "EncryptionConfiguration": (EncryptionConfiguration, False),
        "TableBucketName": (str, True),
        "UnreferencedFileRemoval": (UnreferencedFileRemoval, False),
    }


class TableBucketPolicy(AWSObject):
    """
    `TableBucketPolicy <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-s3tables-tablebucketpolicy.html>`__
    """

    resource_type = "AWS::S3Tables::TableBucketPolicy"

    props: PropsDictType = {
        "ResourcePolicy": (dict, True),
        "TableBucketARN": (str, True),
    }


class TablePolicy(AWSObject):
    """
    `TablePolicy <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-s3tables-tablepolicy.html>`__
    """

    resource_type = "AWS::S3Tables::TablePolicy"

    props: PropsDictType = {
        "ResourcePolicy": (dict, True),
        "TableARN": (str, True),
    }
