"""
Strategy Domain — Value Objects.
"""

from dataclasses import dataclass


# ─── Vision Status ───────────────────────────────

@dataclass(frozen=True)
class VisionStatus:
    DRAFT = "draft"
    ACTIVE = "active"
    ARCHIVED = "archived"

    ALL = [DRAFT, ACTIVE, ARCHIVED]


# ─── Theme Priority ──────────────────────────────

@dataclass(frozen=True)
class ThemePriority:
    LOW = "low"
    MEDIUM = "medium"
    HIGH = "high"
    CRITICAL = "critical"

    ALL = [LOW, MEDIUM, HIGH, CRITICAL]


# ─── Theme Status ─────────────────────────────────

@dataclass(frozen=True)
class ThemeStatus:
    DRAFT = "draft"
    ACTIVE = "active"
    COMPLETED = "completed"
    ARCHIVED = "archived"

    ALL = [DRAFT, ACTIVE, COMPLETED, ARCHIVED]


# ─── Objective Level ──────────────────────────────

@dataclass(frozen=True)
class ObjectiveLevel:
    ENTERPRISE = "enterprise"
    BUSINESS_UNIT = "business_unit"
    DEPARTMENT = "department"
    TEAM = "team"

    ALL = [ENTERPRISE, BUSINESS_UNIT, DEPARTMENT, TEAM]


# ─── Objective Time Frame ─────────────────────────

@dataclass(frozen=True)
class ObjectiveTimeFrame:
    ANNUAL = "annual"
    QUARTERLY = "quarterly"

    ALL = [ANNUAL, QUARTERLY]


# ─── Objective Status ─────────────────────────────

@dataclass(frozen=True)
class ObjectiveStatus:
    DRAFT = "draft"
    ACTIVE = "active"
    AT_RISK = "at_risk"
    ACHIEVED = "achieved"
    MISSED = "missed"

    ALL = [DRAFT, ACTIVE, AT_RISK, ACHIEVED, MISSED]


# ─── Key Result Metric Type ──────────────────────

@dataclass(frozen=True)
class MetricType:
    NUMBER = "number"
    PERCENTAGE = "percentage"
    CURRENCY = "currency"
    BOOLEAN = "boolean"

    ALL = [NUMBER, PERCENTAGE, CURRENCY, BOOLEAN]


# ─── Check-In Confidence ─────────────────────────

@dataclass(frozen=True)
class ConfidenceLevel:
    LOW = "low"
    MEDIUM = "medium"
    HIGH = "high"

    ALL = [LOW, MEDIUM, HIGH]


# ─── KPI Direction ────────────────────────────────

@dataclass(frozen=True)
class KPIDirection:
    HIGHER_IS_BETTER = "higher_is_better"
    LOWER_IS_BETTER = "lower_is_better"
    TARGET = "target"

    ALL = [HIGHER_IS_BETTER, LOWER_IS_BETTER, TARGET]


# ─── KPI Frequency ────────────────────────────────

@dataclass(frozen=True)
class KPIFrequency:
    DAILY = "daily"
    WEEKLY = "weekly"
    MONTHLY = "monthly"
    QUARTERLY = "quarterly"
    YEARLY = "yearly"

    ALL = [DAILY, WEEKLY, MONTHLY, QUARTERLY, YEARLY]


# ─── KPI Data Source ──────────────────────────────

@dataclass(frozen=True)
class KPIDataSource:
    MANUAL = "manual"
    CALCULATED = "calculated"
    INTEGRATED = "integrated"

    ALL = [MANUAL, CALCULATED, INTEGRATED]


# ─── Strategy Map Status ──────────────────────────

@dataclass(frozen=True)
class StrategyMapStatus:
    DRAFT = "draft"
    PUBLISHED = "published"
    ARCHIVED = "archived"

    ALL = [DRAFT, PUBLISHED, ARCHIVED]


# ─── Causal Link Strength ────────────────────────

@dataclass(frozen=True)
class LinkStrength:
    WEAK = "weak"
    MEDIUM = "medium"
    STRONG = "strong"

    ALL = [WEAK, MEDIUM, STRONG]


# ─── Scorecard Status ─────────────────────────────

@dataclass(frozen=True)
class ScorecardStatus:
    DRAFT = "draft"
    ACTIVE = "active"
    CLOSED = "closed"
    ARCHIVED = "archived"

    ALL = [DRAFT, ACTIVE, CLOSED, ARCHIVED]


# ─── Gate Status ──────────────────────────────────

@dataclass(frozen=True)
class GateReviewStatus:
    PENDING = "pending"
    IN_REVIEW = "in_review"
    PASSED = "passed"
    CONDITIONAL = "conditional"
    FAILED = "failed"

    ALL = [PENDING, IN_REVIEW, PASSED, CONDITIONAL, FAILED]


# ─── Policy Status ────────────────────────────────

@dataclass(frozen=True)
class PolicyStatus:
    DRAFT = "draft"
    ACTIVE = "active"
    UNDER_REVIEW = "under_review"
    RETIRED = "retired"

    ALL = [DRAFT, ACTIVE, UNDER_REVIEW, RETIRED]
