# Copyright 1999-2021 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

import logging
from portage.util import writemsg_level


def create_depgraph_params(myopts, myaction):
    # configure emerge engine parameters
    #
    # autounmask:               enable autounmask
    # autounmask_keep_keywords: prevent autounmask changes to package.accept_keywords
    # autounmask_keep_license:  prevent autounmask changes to package.license
    # autounmask_keep_masks:    prevent autounmask changes to package.mask
    # autounmask_keep_use:      prevent autounmask changes to package.use
    # self:      include _this_ package regardless of if it is merged.
    # selective: exclude the package if it is merged
    # recurse:   go into the dependencies
    # deep:      go into the dependencies of already merged packages
    # empty:     pretend nothing is merged
    # complete:  completely account for all known dependencies
    # bdeps:     satisfy build time dependencies of packages that are
    #   already built, even though they are not strictly required
    # remove:    build graph for use in removing packages
    # rebuilt_binaries: replace installed packages with rebuilt binaries
    # rebuild_if_new_slot: rebuild or reinstall packages when
    # 	slot/sub-slot := operator dependencies can be satisfied by a newer
    # 	slot/sub-slot, so that older packages slots will become eligible for
    # 	removal by the --depclean action as soon as possible
    # ignore_built_slot_operator_deps: ignore the slot/sub-slot := operator parts
    # 	of dependencies that have been recorded when packages where built
    # ignore_soname_deps: ignore the soname dependencies of built
    #   packages, so that they do not trigger dependency resolution
    #   failures, or cause packages to be rebuilt or replaced.
    # ignore_world: ignore the @world package set and its dependencies
    # implicit_system_deps: Assume that packages may have implicit dependencies
    #   on packages which belong to the @system set.
    # with_test_deps: pull in test deps for packages matched by arguments
    # changed_deps: rebuild installed packages with outdated deps
    # changed_deps_report: report installed packages with outdated deps
    # changed_slot: rebuild installed packages with outdated SLOT metadata
    # binpkg_changed_deps: reject binary packages with outdated deps
    myparams = {"recurse": True}

    binpkg_respect_use = myopts.get("--binpkg-respect-use")
    if binpkg_respect_use is not None:
        myparams["binpkg_respect_use"] = binpkg_respect_use
    elif "--usepkgonly" not in myopts:
        # If --binpkg-respect-use is not explicitly specified, we enable
        # the behavior automatically (like requested in bug #297549), as
        # long as it doesn't strongly conflict with other options that
        # have been specified.
        myparams["binpkg_respect_use"] = "auto"

    autounmask_keep_keywords = myopts.get("--autounmask-keep-keywords")
    autounmask_keep_masks = myopts.get("--autounmask-keep-masks")

    autounmask = myopts.get("--autounmask")
    autounmask_license = myopts.get(
        "--autounmask-license", "y" if autounmask is True else "n"
    )
    autounmask_use = (
        "n"
        if myparams.get("binpkg_respect_use") == "y"
        else myopts.get("--autounmask-use")
    )
    if autounmask == "n":
        autounmask = False
    else:
        if autounmask is None:
            if autounmask_use in (None, "y"):
                autounmask = True
            if autounmask_license in ("y",):
                autounmask = True

            # Do not enable package.accept_keywords or package.mask
            # changes by default.
            if autounmask_keep_keywords is None:
                autounmask_keep_keywords = True
            if autounmask_keep_masks is None:
                autounmask_keep_masks = True
        else:
            autounmask = True

    myparams["autounmask"] = autounmask
    myparams["autounmask_keep_use"] = True if autounmask_use == "n" else False
    myparams["autounmask_keep_license"] = False if autounmask_license == "y" else True
    myparams["autounmask_keep_keywords"] = (
        False if autounmask_keep_keywords in (None, "n") else True
    )
    myparams["autounmask_keep_masks"] = (
        False if autounmask_keep_masks in (None, "n") else True
    )

    bdeps = myopts.get("--with-bdeps")
    if bdeps is not None:
        myparams["bdeps"] = bdeps
    elif myaction == "remove" or (
        myopts.get("--with-bdeps-auto") != "n" and "--usepkg" not in myopts
    ):
        myparams["bdeps"] = "auto"

    ignore_built_slot_operator_deps = myopts.get("--ignore-built-slot-operator-deps")
    if ignore_built_slot_operator_deps is not None:
        myparams["ignore_built_slot_operator_deps"] = ignore_built_slot_operator_deps

    myparams["ignore_soname_deps"] = myopts.get("--ignore-soname-deps", "y")

    dynamic_deps = myopts.get("--dynamic-deps", "y") != "n" and "--nodeps" not in myopts
    if dynamic_deps:
        myparams["dynamic_deps"] = True

    myparams["implicit_system_deps"] = myopts.get("--implicit-system-deps", "y") != "n"

    if myaction == "remove":
        myparams["remove"] = True
        myparams["complete"] = True
        myparams["selective"] = True
        return myparams

    if myopts.get("--ignore-world") is True:
        myparams["ignore_world"] = True

    rebuild_if_new_slot = myopts.get("--rebuild-if-new-slot")
    if rebuild_if_new_slot is not None:
        myparams["rebuild_if_new_slot"] = rebuild_if_new_slot

    changed_slot = myopts.get("--changed-slot") is True
    if changed_slot:
        myparams["changed_slot"] = True

    if (
        "--update" in myopts
        or "--newrepo" in myopts
        or "--newuse" in myopts
        or "--reinstall" in myopts
        or "--noreplace" in myopts
        or myopts.get("--changed-deps", "n") != "n"
        or changed_slot
        or myopts.get("--selective", "n") != "n"
    ):
        myparams["selective"] = True

    deep = myopts.get("--deep")
    if deep is not None and deep != 0:
        myparams["deep"] = deep

    complete_if_new_use = myopts.get("--complete-graph-if-new-use")
    if complete_if_new_use is not None:
        myparams["complete_if_new_use"] = complete_if_new_use

    complete_if_new_ver = myopts.get("--complete-graph-if-new-ver")
    if complete_if_new_ver is not None:
        myparams["complete_if_new_ver"] = complete_if_new_ver

    if (
        "--complete-graph" in myopts
        or "--rebuild-if-new-rev" in myopts
        or "--rebuild-if-new-ver" in myopts
        or "--rebuild-if-unbuilt" in myopts
    ):
        myparams["complete"] = True
    if "--emptytree" in myopts:
        myparams["empty"] = True
        myparams["deep"] = True
        myparams.pop("selective", None)

    if "--nodeps" in myopts:
        myparams.pop("recurse", None)
        myparams.pop("deep", None)
        myparams.pop("complete", None)

    rebuilt_binaries = myopts.get("--rebuilt-binaries")
    if (
        rebuilt_binaries is True
        or rebuilt_binaries != "n"
        and "--usepkgonly" in myopts
        and myopts.get("--deep") is True
        and "--update" in myopts
    ):
        myparams["rebuilt_binaries"] = True

    binpkg_changed_deps = myopts.get("--binpkg-changed-deps")
    if binpkg_changed_deps is not None:
        myparams["binpkg_changed_deps"] = binpkg_changed_deps
    elif "--usepkgonly" not in myopts:
        # In order to avoid dependency resolution issues due to changed
        # dependencies, enable this automatically, as long as it doesn't
        # strongly conflict with other options that have been specified.
        myparams["binpkg_changed_deps"] = "auto"

    changed_deps = myopts.get("--changed-deps")
    if changed_deps is not None:
        myparams["changed_deps"] = changed_deps

    changed_deps_report = myopts.get("--changed-deps-report", "n") == "y"
    if changed_deps_report:
        myparams["changed_deps_report"] = True

    if myopts.get("--selective") == "n":
        # --selective=n can be used to remove selective
        # behavior that may have been implied by some
        # other option like --update.
        myparams.pop("selective", None)

    with_test_deps = myopts.get("--with-test-deps")
    if with_test_deps is not None:
        myparams["with_test_deps"] = with_test_deps

    if "--debug" in myopts:
        writemsg_level(
            "\n\nmyparams %s\n\n" % myparams, noiselevel=-1, level=logging.DEBUG
        )

    return myparams
