"""InfraLens Python example: deterministic bounded-queue backpressure."""

from collections import deque
from dataclasses import dataclass


@dataclass
class Metrics:
    accepted: int = 0
    rejected: int = 0
    completed: int = 0
    high_watermark: int = 0


class BoundedRuntime:
    def __init__(self, capacity: int) -> None:
        self.capacity = capacity
        self.queue: deque[str] = deque()
        self.metrics = Metrics()

    def admit(self, request_id: str) -> bool:
        if len(self.queue) == self.capacity:
            self.metrics.rejected += 1
            return False
        self.queue.append(request_id)
        self.metrics.accepted += 1
        self.metrics.high_watermark = max(self.metrics.high_watermark, len(self.queue))
        return True

    def complete_one(self) -> str | None:
        if not self.queue:
            return None
        item = self.queue.popleft()
        self.metrics.completed += 1
        return item


def smoke_test() -> None:
    runtime = BoundedRuntime(capacity=2)
    assert runtime.admit("a")
    assert runtime.admit("b")
    assert not runtime.admit("c")
    assert runtime.complete_one() == "a"
    assert runtime.admit("d")
    assert runtime.metrics == Metrics(accepted=3, rejected=1, completed=1, high_watermark=2)
    print("backpressure_queue_toy.py ok", runtime.metrics)


if __name__ == "__main__":
    smoke_test()
