"""
Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
SPDX-License-Identifier: MIT-0
"""
from cfnlint.languageExtensions import LanguageExtensions
from cfnlint.rules import CloudFormationLintRule


class ToJsonString(CloudFormationLintRule):
    """Check if ToJsonString values are correct"""

    id = "E1031"
    shortdesc = "ToJsonString validation of parameters"
    description = "Making sure Fn::ToJsonString is configured correctly"
    source_url = "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference.html"
    tags = ["functions", "toJsonString"]

    def match(self, cfn):
        has_language_extensions_transform = cfn.has_language_extensions_transform()
        unsupported_pseudo_parameters = ["AWS::NotificationARNs"]

        matches = []
        intrinsic_function = "Fn::ToJsonString"
        fn_toJsonString_objects = cfn.search_deep_keys(intrinsic_function)

        for fn_toJsonString_object in fn_toJsonString_objects:
            tree = fn_toJsonString_object[:-1]
            fn_toJsonString_object_value = fn_toJsonString_object[-1]
            LanguageExtensions.validate_transform_is_declared(
                self,
                has_language_extensions_transform,
                matches,
                tree,
                intrinsic_function,
            )
            LanguageExtensions.validate_type(
                self, fn_toJsonString_object_value, matches, tree, intrinsic_function
            )
            LanguageExtensions.validate_pseudo_parameters(
                self,
                fn_toJsonString_object_value,
                matches,
                tree,
                unsupported_pseudo_parameters,
                intrinsic_function,
            )
        return matches
