#!/usr/bin/env python3

import itertools
import sys

try:
    from pkgcore.restrictions.boolean import OrRestriction
    from pkgcore.util import commandline
except ImportError:
    print('Cannot import pkgcore!', file=sys.stderr)
    print('Verify it is properly installed and/or PYTHONPATH is set correctly.', file=sys.stderr)
    if '--debug' not in sys.argv:
        print('Add --debug to the commandline for a traceback.', file=sys.stderr)
    else:
        raise
    sys.exit(1)


argparser = commandline.ArgumentParser(color=False, version=False)
argparser.add_argument(
    'target', nargs='+', help='target package atoms')


@argparser.bind_final_check
def check_args(parser, namespace):
    namespace.repo = namespace.domain.ebuild_repos
    namespace.restrict = OrRestriction(
        *commandline.convert_to_restrict(namespace.target))


def getter(pkg):
    return (pkg.key, getattr(pkg, "maintainers", None))


@argparser.bind_main_func
def main(options, out, err):
    for t, pkgs in itertools.groupby(
            options.repo.itermatch(options.restrict, sorter=sorted), getter):
        out.write(t[0])
        out.first_prefix = "    "
        for pkg in pkgs:
            out.write('%s::%s' % (pkg.cpvstr, pkg.repo.repo_id))
        out.first_prefix = ""
        item = 'maintainer'
        values = t[1]
        if values:
            out.write(
                "%s%s: %s" %
                (item.title(), 's'[len(values) == 1:], ', '.join(str(x) for x in values)))
        out.write()


if __name__ == '__main__':
    tool = commandline.Tool(argparser)
    sys.exit(tool())
