# Copyright 1999-2011 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

from _emerge.DepPriority import DepPriority


class DepPriorityNormalRange:
    """
    DepPriority properties              Index      Category

    buildtime                                      HARD
    runtime                                3       MEDIUM
    runtime_post                           2       MEDIUM_SOFT
    optional                               1       SOFT
    (none of the above)                    0       NONE
    """

    MEDIUM = 3
    MEDIUM_SOFT = 2
    MEDIUM_POST = 2
    SOFT = 1
    NONE = 0

    @classmethod
    def _ignore_optional(cls, priority):
        if priority.__class__ is not DepPriority:
            return False
        return bool(priority.optional)

    @classmethod
    def _ignore_runtime_post(cls, priority):
        if priority.__class__ is not DepPriority:
            return False
        return bool(priority.optional or priority.runtime_post)

    @classmethod
    def _ignore_runtime(cls, priority):
        if priority.__class__ is not DepPriority:
            return False
        return bool(priority.optional or not priority.buildtime)

    ignore_medium = _ignore_runtime
    ignore_medium_soft = _ignore_runtime_post
    ignore_medium_post = _ignore_runtime_post
    ignore_soft = _ignore_optional


DepPriorityNormalRange.ignore_priority = (
    None,
    DepPriorityNormalRange._ignore_optional,
    DepPriorityNormalRange._ignore_runtime_post,
    DepPriorityNormalRange._ignore_runtime,
)
