#!/usr/bin/env python3
# Find revdeps for a given dep, assumes environment is a native Gentoo system.

import argparse
import logging

from pkgcraft.config import Config
from pkgcraft.eapi import EAPI_LATEST_OFFICIAL
from pkgcraft.error import InvalidRestrict, PkgcraftError
from pkgcraft.logging import logger
from pkgcraft.restrict import Restrict


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("--quiet", "-q", action="count", default=0)
    parser.add_argument("--verbose", "-v", action="count", default=0)
    parser.add_argument("--repo", "-r", metavar="REPO_PATH", dest="repos", action="append")
    parser.add_argument("dep")
    args = parser.parse_args()

    # set logging level, defaulting to warning
    level = logging.WARNING + (args.quiet - args.verbose) * 10
    logger.setLevel(level)

    try:
        restrict = Restrict.dep(args.dep)
    except InvalidRestrict as e:
        parser.error(e)

    # try to load specified repos, falling back to repos.conf
    config = Config()
    try:
        if args.repos:
            for path in args.repos:
                config.add_repo(path)
        else:
            config.load()
    except PkgcraftError as e:
        parser.error(e)

    dep_keys = sorted(EAPI_LATEST_OFFICIAL.dep_keys)
    for pkg in config.repos.ebuild:
        for attr, deps in ((k, deps) for k in dep_keys if (deps := getattr(pkg, k.lower()))):
            for dep in filter(restrict.matches, deps.iter_flatten()):
                if dep.blocker is None:
                    print(f"{pkg}: {attr}: {dep}")


if __name__ == "__main__":
    main()
