"""Central media runtime engine."""

from __future__ import annotations

import asyncio
from collections import deque
from dataclasses import dataclass
from time import time

from bot.core.metrics import incr


MAX_CONCURRENT_DOWNLOADS = 3


@dataclass(slots=True)
class MediaTask:
    platform: str
    url: str
    created_at: float


MEDIA_QUEUE = deque(maxlen=100)
MEDIA_SEMAPHORE = asyncio.Semaphore(MAX_CONCURRENT_DOWNLOADS)


async def run_media_task(platform: str, url: str, coro):
    MEDIA_QUEUE.append(
        MediaTask(
            platform=platform,
            url=url,
            created_at=time(),
        )
    )

    incr(f"media.queue.{platform}")

    async with MEDIA_SEMAPHORE:
        incr(f"media.active.{platform}")

        return await coro


def media_stats() -> dict:
    return {
        "queued": len(MEDIA_QUEUE),
        "concurrency": MAX_CONCURRENT_DOWNLOADS,
    }
