#!/usr/bin/env python3
"""Inspect all component SCHEMAS."""
import os
import importlib
import pkgutil

from homeassistant.config import _identify_config_schema
from homeassistant.scripts.check_config import color


def explore_module(package):
    """Explore the modules."""
    module = importlib.import_module(package)
    if not hasattr(module, '__path__'):
        return []
    for _, name, _ in pkgutil.iter_modules(module.__path__, package + '.'):
        yield name


def main():
    """Run the script."""
    if not os.path.isfile('requirements_all.txt'):
        print('Run this from HA root dir')
        return

    msg = {}

    def add_msg(key, item):
        """Add a message."""
        if key not in msg:
            msg[key] = []
        msg[key].append(item)

    for package in explore_module('homeassistant.components'):
        module = importlib.import_module(package)
        module_name = getattr(module, 'DOMAIN', module.__name__)

        if hasattr(module, 'PLATFORM_SCHEMA'):
            if hasattr(module, 'CONFIG_SCHEMA'):
                add_msg('WARNING', "Module {} contains PLATFORM and CONFIG "
                        "schemas".format(module_name))
            add_msg('PLATFORM SCHEMA', module_name)
            continue

        if not hasattr(module, 'CONFIG_SCHEMA'):
            add_msg('NO SCHEMA', module_name)
            continue

        schema_type, schema = _identify_config_schema(module)

        add_msg("CONFIG_SCHEMA " + schema_type, module_name + ' ' +
                color('cyan', str(schema)[:60]))

    for key in sorted(msg):
        print("\n{}\n - {}".format(key, '\n - '.join(msg[key])))


if __name__ == '__main__':
    main()