"""Minimal NabzBazaar Price API client (Python 3.10+)."""
import time
import requests

class NabzApiError(RuntimeError):
    pass

class NabzClient:
    def __init__(self, api_key, base_url="https://nabzebazaar.ir/api/v1", timeout=30):
        self.base_url = base_url.rstrip("/")
        self.timeout = timeout
        self.session = requests.Session()
        self.session.headers.update({"X-API-Key": api_key, "Accept": "application/json"})

    def request(self, method, path, *, params=None, json=None):
        for attempt in range(3):
            response = self.session.request(method, self.base_url + path, params=params, json=json, timeout=self.timeout)
            if response.status_code not in (429, 500, 502, 503, 504) or attempt == 2:
                break
            time.sleep(int(response.headers.get("Retry-After", 2 ** attempt)))
        payload = response.json()
        if not response.ok or not payload.get("success"):
            error = payload.get("error", {})
            raise NabzApiError(f"{response.status_code} {error.get('code')}: {error.get('message')}")
        return payload

    def latest(self, **filters):
        return self.request("GET", "/prices/latest", params=filters)

    def history(self, product_id, days=7, interval="day", color=None):
        params = {"product_id": product_id, "days": days, "interval": interval}
        if color:
            params["color"] = color
        return self.request("GET", "/prices/history", params=params)

    def usage(self):
        return self.request("GET", "/usage")

# client = NabzClient("YOUR_API_KEY")
# result = client.latest(brand="Samsung", storage_gb=128, per_page=10)
