"""
Strategy Domain Entity — KPI Target.
"""

from __future__ import annotations

import uuid
from dataclasses import dataclass, field
from datetime import date, datetime
from typing import Any, Optional

from shared.base_classes.entity import TenantEntity


@dataclass
class KPITarget(TenantEntity):
    """هدف‌گذاری KPI برای یک دوره مشخص."""

    kpi_id: Optional[uuid.UUID] = None
    period_start: Optional[date] = None
    period_end: Optional[date] = None
    target_value: float = 0.0
    stretch_value: Optional[float] = None  # Stretch goal

    notes: str = ""
    metadata: dict[str, Any] = field(default_factory=dict)

    # ── Business Rules ──────────────────────────

    def validate_period(self) -> None:
        if self.period_start and self.period_end:
            if self.period_end < self.period_start:
                raise ValueError("تاریخ پایان نمی‌تواند قبل از تاریخ شروع باشد")

    def validate_stretch(self) -> None:
        if self.stretch_value is not None and self.stretch_value < self.target_value:
            raise ValueError("هدف چالشی نمی‌تواند کمتر از هدف اصلی باشد")
