"""
Strategy Domain Entity — Scorecard Measure.
"""

from __future__ import annotations

import uuid
from dataclasses import dataclass, field
from datetime import datetime
from typing import Any, Optional

from shared.base_classes.entity import TenantEntity


@dataclass
class ScorecardMeasure(TenantEntity):
    """سنجه در کارت امتیازی متوازن."""

    perspective_id: Optional[uuid.UUID] = None
    kpi_assignment_id: Optional[uuid.UUID] = None  # FK to KPIAssignment

    weight: float = 1.0
    target_value: float = 0.0
    actual_value: float = 0.0
    score: float = 0.0
    status: str = "pending"  # pending / on_track / at_risk / behind

    metadata: dict[str, Any] = field(default_factory=dict)

    def calculate_score(self) -> float:
        """محاسبه امتیاز بر اساس هدف و واقعی."""
        if self.target_value == 0:
            return 0.0
        self.score = min((self.actual_value / self.target_value) * 100, 100.0)
        return self.score

    def update_status(self) -> str:
        """بروزرسانی وضعیت بر اساس امتیاز."""
        if self.score >= 90:
            self.status = "on_track"
        elif self.score >= 70:
            self.status = "at_risk"
        else:
            self.status = "behind"
        return self.status
