"""Raw representations of every data type in the AWS Config service.

See Also:
    `AWS developer guide for Config
    <https://docs.aws.amazon.com/config/latest/developerguide/index.html>`_

This file is automatically generated, and should not be directly edited.
"""

from attr import attrib
from attr import attrs

from ..core import ATTRSCONFIG
from ..core import Resource
from ..core import ResourceProperties
from ..core import create_object_converter

__all__ = [
    "AggregationAuthorization",
    "AggregationAuthorizationProperties",
    "ConfigRule",
    "ConfigRuleProperties",
    "ConfigurationAggregator",
    "ConfigurationAggregatorProperties",
    "ConfigurationRecorder",
    "ConfigurationRecorderProperties",
    "DeliveryChannel",
    "DeliveryChannelProperties",
]


@attrs(**ATTRSCONFIG)
class AggregationAuthorizationProperties(ResourceProperties):
    AuthorizedAccountId = attrib(default=None)
    AuthorizedAwsRegion = attrib(default=None)


@attrs(**ATTRSCONFIG)
class AggregationAuthorization(Resource):
    """A Aggregation Authorization for Config.

    See Also:
        `AWS Cloud Formation documentation for AggregationAuthorization
        <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-config-aggregationauthorization.html>`_
    """

    RESOURCE_TYPE = "AWS::Config::AggregationAuthorization"

    Properties: AggregationAuthorizationProperties = attrib(
        factory=AggregationAuthorizationProperties,
        converter=create_object_converter(AggregationAuthorizationProperties),
    )


@attrs(**ATTRSCONFIG)
class ConfigRuleProperties(ResourceProperties):
    ConfigRuleName = attrib(default=None)
    Description = attrib(default=None)
    InputParameters = attrib(default=None)
    MaximumExecutionFrequency = attrib(default=None)
    Scope = attrib(default=None)
    Source = attrib(default=None)


@attrs(**ATTRSCONFIG)
class ConfigRule(Resource):
    """A Config Rule for Config.

    See Also:
        `AWS Cloud Formation documentation for ConfigRule
        <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-config-configrule.html>`_
    """

    RESOURCE_TYPE = "AWS::Config::ConfigRule"

    Properties: ConfigRuleProperties = attrib(
        factory=ConfigRuleProperties,
        converter=create_object_converter(ConfigRuleProperties),
    )


@attrs(**ATTRSCONFIG)
class ConfigurationAggregatorProperties(ResourceProperties):
    AccountAggregationSources = attrib(default=None)
    ConfigurationAggregatorName = attrib(default=None)
    OrganizationAggregationSource = attrib(default=None)


@attrs(**ATTRSCONFIG)
class ConfigurationAggregator(Resource):
    """A Configuration Aggregator for Config.

    See Also:
        `AWS Cloud Formation documentation for ConfigurationAggregator
        <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-config-configurationaggregator.html>`_
    """

    RESOURCE_TYPE = "AWS::Config::ConfigurationAggregator"

    Properties: ConfigurationAggregatorProperties = attrib(
        factory=ConfigurationAggregatorProperties,
        converter=create_object_converter(ConfigurationAggregatorProperties),
    )


@attrs(**ATTRSCONFIG)
class ConfigurationRecorderProperties(ResourceProperties):
    Name = attrib(default=None)
    RecordingGroup = attrib(default=None)
    RoleARN = attrib(default=None)


@attrs(**ATTRSCONFIG)
class ConfigurationRecorder(Resource):
    """A Configuration Recorder for Config.

    See Also:
        `AWS Cloud Formation documentation for ConfigurationRecorder
        <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-config-configurationrecorder.html>`_
    """

    RESOURCE_TYPE = "AWS::Config::ConfigurationRecorder"

    Properties: ConfigurationRecorderProperties = attrib(
        factory=ConfigurationRecorderProperties,
        converter=create_object_converter(ConfigurationRecorderProperties),
    )


@attrs(**ATTRSCONFIG)
class DeliveryChannelProperties(ResourceProperties):
    ConfigSnapshotDeliveryProperties = attrib(default=None)
    Name = attrib(default=None)
    S3BucketName = attrib(default=None)
    S3KeyPrefix = attrib(default=None)
    SnsTopicARN = attrib(default=None)


@attrs(**ATTRSCONFIG)
class DeliveryChannel(Resource):
    """A Delivery Channel for Config.

    See Also:
        `AWS Cloud Formation documentation for DeliveryChannel
        <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-config-deliverychannel.html>`_
    """

    RESOURCE_TYPE = "AWS::Config::DeliveryChannel"

    Properties: DeliveryChannelProperties = attrib(
        factory=DeliveryChannelProperties,
        converter=create_object_converter(DeliveryChannelProperties),
    )
