"""
Central rate limiting configuration using SlowAPI.
"""

from slowapi import Limiter
from slowapi.util import get_remote_address

from app.config import settings
from app.core.rate_limit_storage import PostgreSQLRateLimitStorage

limiter = Limiter(
    key_func=get_remote_address,
    storage_uri=settings.DATABASE_URL.replace("postgresql+asyncpg://", "postgresql+munal://", 1),
    strategy="fixed-window",
    enabled=settings.RATE_LIMIT_ENABLED and not settings.is_testing,
    default_limits=["120/minute"],
)


def close_rate_limit_storage() -> None:
    """Release the synchronous connection pool at shutdown."""
    if isinstance(limiter._storage, PostgreSQLRateLimitStorage):
        limiter._storage.close()
