import time
from collections import deque

class RateLimiter:
    """
    Ein generischer Rate-Limiter:
    - max_calls: Anzahl Requests
    - per_seconds: Zeitfenster
    """
    def __init__(self, max_calls: int, per_seconds: float):
        self.max_calls = max_calls
        self.per_seconds = per_seconds
        self.calls = deque()

    def wait(self):
        """
        Blockiert, bis ein Request wieder erlaubt ist.
        """
        now = time.time()

        # Alte Einträge entfernen
        while self.calls and now - self.calls[0] > self.per_seconds:
            self.calls.popleft()

        # Falls Limit erreicht → warten
        if len(self.calls) >= self.max_calls:
            sleep_time = self.per_seconds - (now - self.calls[0])
            if sleep_time > 0:
                time.sleep(sleep_time)

        # Request registrieren
        self.calls.append(time.time())
