"""Redis client for caching and job queue."""
from collections.abc import AsyncGenerator
from typing import Optional

from redis import asyncio as aioredis

from src.config import get_settings

settings = get_settings()

redis_client: Optional[aioredis.Redis] = None


async def get_redis() -> AsyncGenerator[aioredis.Redis, None]:
    """FastAPI dependency: shared Redis client."""
    global redis_client
    if redis_client is None:
        redis_client = aioredis.from_url(
            settings.redis_url,
            encoding="utf-8",
            decode_responses=True,
        )
    try:
        yield redis_client
    finally:
        pass


async def close_redis() -> None:
    """Close Redis connection on shutdown."""
    global redis_client
    if redis_client:
        await redis_client.close()
        redis_client = None
