"""Media cache and retry helpers."""

from __future__ import annotations

import time


MEDIA_CACHE: dict[str, dict] = {}


def cache_media(key: str, payload: dict) -> None:
    MEDIA_CACHE[key] = {
        "payload": payload,
        "created_at": time.time(),
        "hits": 0,
    }


def get_cached_media(key: str) -> dict | None:
    item = MEDIA_CACHE.get(key)

    if not item:
        return None

    item["hits"] += 1

    return item["payload"]


async def retry_media_task(factory, retries: int = 2):
    last_error = None

    for _ in range(retries + 1):
        try:
            result = await factory()

            if result:
                return result

        except Exception as e:
            last_error = e

    if last_error:
        raise last_error

    return None
