from pydantic import BaseModel
from typing import Optional

class Target(BaseModel):
    theta: float
    value: float
    result: Optional[float]
    drift: float = 0.0

    @classmethod
    def max_drift(cls) -> int:
        return 15 # 15% elasticity, let it drift...

    @classmethod
    def max_drift_increment(cls) -> int:
        return 1 # 10%

    def minimum(self, drift_percent = 0.0) -> float:
        return self.value - (self.value * drift_percent)

    def maximum(self, drift_percent = 0.0) -> float:
        return self.value + (self.value * drift_percent)