"""Canonical domain enums for Aegis.

These enums represent core domain concepts and are the single source of
truth.  ``models/enums.py`` re-exports them so that existing ORM code
continues to work without changes.
"""

# Import enum
import enum


# Define class TechniqueStatus
class TechniqueStatus(str, enum.Enum):
    """Coverage and evaluation status for a MITRE ATT&CK technique."""

    # Assign not_evaluated = "not_evaluated"
    not_evaluated = "not_evaluated"
    # Assign in_progress = "in_progress"
    in_progress = "in_progress"
    # Assign validated = "validated"
    validated = "validated"
    # Assign partial = "partial"
    partial = "partial"
    # Assign not_covered = "not_covered"
    not_covered = "not_covered"
    # Assign review_required = "review_required"
    review_required = "review_required"


# Define class TestState
class TestState(str, enum.Enum):
    """Lifecycle states in the security test state machine."""

    # Assign draft = "draft"
    draft = "draft"
    # Assign red_executing = "red_executing"
    red_executing = "red_executing"
    # Assign blue_evaluating = "blue_evaluating"
    blue_evaluating = "blue_evaluating"
    # Assign in_review = "in_review"
    in_review = "in_review"
    # Assign validated = "validated"
    validated = "validated"
    # Assign rejected = "rejected"
    rejected = "rejected"
    disputed = "disputed"   # one lead approved, the other rejected


# Define class TeamSide
class TeamSide(str, enum.Enum):
    """Identifies which team (red or blue) an action belongs to."""

    # Assign red = "red"
    red = "red"
    # Assign blue = "blue"
    blue = "blue"


# Define class TestResult
class TestResult(str, enum.Enum):
    """Outcome of a red-team test from a detection perspective."""

    # Assign detected = "detected"
    detected = "detected"
    # Assign not_detected = "not_detected"
    not_detected = "not_detected"
    # Assign partially_detected = "partially_detected"
    partially_detected = "partially_detected"


# Define class DataClassification
class DataClassification(str, enum.Enum):
    """Data sensitivity classification levels for compliance and retention policies."""

    # Assign public = "public"
    public = "public"
    # Assign internal = "internal"
    internal = "internal"
    # Assign sensitive = "sensitive"
    sensitive = "sensitive"
    # Assign restricted = "restricted"
    restricted = "restricted"
