#!/usr/bin/env python

"""
Provides the Mission Prevalence decision point and its values.
"""

#  Copyright (c) 2024-2025 Carnegie Mellon University.
#  NO WARRANTY. THIS CARNEGIE MELLON UNIVERSITY AND SOFTWARE
#  ENGINEERING INSTITUTE MATERIAL IS FURNISHED ON AN "AS-IS" BASIS.
#  CARNEGIE MELLON UNIVERSITY MAKES NO WARRANTIES OF ANY KIND,
#  EITHER EXPRESSED OR IMPLIED, AS TO ANY MATTER INCLUDING, BUT
#  NOT LIMITED TO, WARRANTY OF FITNESS FOR PURPOSE OR
#  MERCHANTABILITY, EXCLUSIVITY, OR RESULTS OBTAINED FROM USE
#  OF THE MATERIAL. CARNEGIE MELLON UNIVERSITY DOES NOT MAKE
#  ANY WARRANTY OF ANY KIND WITH RESPECT TO FREEDOM FROM
#  PATENT, TRADEMARK, OR COPYRIGHT INFRINGEMENT.
#  Licensed under a MIT (SEI)-style license, please see LICENSE or contact
#  permission@sei.cmu.edu for full terms.
#  [DISTRIBUTION STATEMENT A] This material has been approved for
#  public release and unlimited distribution. Please see Copyright notice
#  for non-US Government use and distribution.
#  This Software includes and/or makes use of Third-Party Software each
#  subject to its own license.
#  DM24-0278


from ssvc.decision_points.base import DecisionPointValue
from ssvc.decision_points.cisa.base import CisaDecisionPoint
from ssvc.decision_points.helpers import print_versions_and_diffs

MINIMAL = DecisionPointValue(
    name="Minimal",
    key="M",
    definition="Neither Support nor Essential apply. "
    "The vulnerable component may be used within the entities, but it is not used as a mission-essential component, nor does it provide impactful support to mission-essential functions.",
)

SUPPORT = DecisionPointValue(
    name="Support",
    key="S",
    definition="The vulnerable component only supports MEFs for two or more entities.",
)

ESSENTIAL = DecisionPointValue(
    name="Essential",
    key="E",
    definition="The vulnerable component directly provides capabilities that constitute at least one MEF for at least one entity; component failure may (but does not necessarily) lead to overall mission failure.",
)


MISSION_PREVALENCE = CisaDecisionPoint(
    name="Mission Prevalence",
    definition="Prevalence of the mission essential functions",
    key="MP",
    version="1.0.0",
    values=(
        MINIMAL,
        SUPPORT,
        ESSENTIAL,
    ),
)

VERSIONS = (MISSION_PREVALENCE,)
LATEST = VERSIONS[-1]

if __name__ == "__main__":

    print_versions_and_diffs(VERSIONS)
