"""EDIT POINT: FX API adapter. Change this module only if you switch FX vendors."""
from datetime import datetime, timezone
import requests
from app.core.settings import get_settings
from app.sources.contracts import Quote


class FxApiSource:
    def latest(self, pair: str) -> Quote:
        if len(pair) != 6:
            raise ValueError("Pair must use six letters, for example USDINR")
        settings = get_settings()
        if not settings.fx_api_key:
            raise RuntimeError("Set FX_API_KEY in .env")
        base, quote = pair[:3], pair[3:]
        response = requests.get(settings.fx_api_base_url, params={"apikey": settings.fx_api_key, "base_currency": base, "currencies": quote}, timeout=15)
        response.raise_for_status()
        payload = response.json()
        # FXAPI response uses data.{currency}.value. REPLACE HERE for another provider.
        rate = float(payload["data"][quote]["value"])
        return Quote("fx_api", pair, datetime.now(timezone.utc), rate, close=rate, raw=payload)
