"""
Simple script to validate NSCLI's plugin names. If they're too long, we can't log them to AppStats, and we shouldn't
ship them. Returns 0 if there were no problems.
"""


import sys

from nscli.__main__ import shrink_plugin_path
import nscli.plugins.base_plugin
from nscli.plugins.plugin_register import NSCLI_PLUGINS


def find_recursive(value):
    for k, v in (value.items() if isinstance(value, dict) else enumerate(value)):
        if isinstance(v, type) and issubclass(v, nscli.plugins.base_plugin.Plugin):
            yield v
        elif isinstance(v, (list, dict)):
            for result in find_recursive(v):
                yield result


def main(argv):
    exit_code = 0
    g = find_recursive(NSCLI_PLUGINS)
    for plugin in g:
        full_plugin_path = ".".join([plugin.__module__, plugin.__name__])
        try:
            shrink_plugin_path(full_plugin_path)
        except ValueError:
            print(full_plugin_path)
            exit_code = 1
    return exit_code


if __name__ == "__main__":
    sys.exit(main(sys.argv))
