"""
Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
SPDX-License-Identifier: MIT-0
"""

from cfnlint.rules import CloudFormationLintRule, RuleMatch


class ServerlessTransform(CloudFormationLintRule):
    """Check if Serverless Resources exist without the Serverless Transform"""

    id = "E3038"
    shortdesc = "Check if Serverless Resources have Serverless Transform"
    description = "Check that a template with Serverless Resources also includes the Serverless Transform"
    source_url = "https://github.com/aws-cloudformation/cfn-python-lint"
    tags = ["resources", "transform"]

    def match(self, cfn):
        matches = []

        transforms = cfn.template.get("Transform", [])
        if not isinstance(transforms, list):
            transforms = [transforms]
        has_serverless_transform = any(
            transform == "AWS::Serverless-2016-10-31" for transform in transforms
        )
        if has_serverless_transform:
            return matches

        for resource_name, resource_values in cfn.get_resources().items():
            resource_type = resource_values["Type"]
            if isinstance(resource_type, str):
                if resource_type.startswith("AWS::Serverless::"):
                    message = (
                        "Serverless Transform required for Type {0} for resource {1}"
                    )
                    matches.append(
                        RuleMatch(
                            ["Transform"], message.format(resource_type, resource_name)
                        )
                    )
                    break
        return matches
