import argparse
from cfnplan import Template, ElementType


def describe(args):
    t = Template.parse_file(args.stack)

    def print_dependencies():
        def log_element(element, level, visited):
            if args.show_verbose:
                indent = ' ' * (level * 2)
                print '%s<== %s' % (indent, element)
            else:
                if not visited:
                    print '  <== %s' % element

        for e in t.elements:
            if e.element_type == ElementType.resource:
                print '%s' % e
                e.visit_dependencies(log_element)

    print_dependencies()


if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    subparsers = parser.add_subparsers(help='Command to run', dest='command')

    describe_parser = subparsers.add_parser('describe', help='Describe the resources and dependencies in a given stack')
    describe_parser.add_argument('stack', help='Stack template')
    describe_parser.add_argument('-v', '--verbose', dest='show_verbose', action='store_true', help='Show the full dependency tree')

    arguments = parser.parse_args()
    describe(arguments)

