from __future__ import annotations

import threading
from datetime import datetime, timezone


class PriceCache:
    """تخزين الأسعار في الذاكرة مع حماية متعددة الخيوط."""

    def __init__(self) -> None:
        self._lock = threading.Lock()
        self._prices: dict[str, float] = {}
        self._last_updated: dict[str, datetime] = {}

    def set(self, symbol: str, price: float) -> None:
        with self._lock:
            self._prices[symbol] = price
            self._last_updated[symbol] = datetime.now(timezone.utc)

    def get(self, symbol: str) -> float | None:
        with self._lock:
            return self._prices.get(symbol)

    def get_all(self) -> dict[str, float]:
        with self._lock:
            return dict(self._prices)

    def is_stale(self, symbol: str, max_age_seconds: int = 10) -> bool:
        with self._lock:
            ts = self._last_updated.get(symbol)
        if ts is None:
            return True
        age = (datetime.now(timezone.utc) - ts).total_seconds()
        return age > max_age_seconds

    def last_updated(self, symbol: str) -> datetime | None:
        with self._lock:
            return self._last_updated.get(symbol)


price_cache = PriceCache()
