import secrets
import time
from threading import Lock

class HLSRegistry:
    def __init__(self, ttl=300, max_recursos=10000):
        self.ttl = ttl
        self.max_recursos = max_recursos
        self.recursos = {}
        self.lock = Lock()

    def _limpiar(self):
        ahora = time.time()
        expirados = [
            clave for clave, valor in self.recursos.items()
            if ahora >= valor["exp"]
        ]
        for clave in expirados:
            del self.recursos[clave]
        return len(expirados)

    def registrar(self, url):
        with self.lock:
            self._limpiar()

            if len(self.recursos) >= self.max_recursos:
                raise RuntimeError(
                    "Limite de recursos HLS alcanzado"
                )

            identificador = secrets.token_urlsafe(24)
            self.recursos[identificador] = {
                "url": url,
                "exp": time.time() + self.ttl
            }

            return identificador

    def resolver(self, identificador):
        with self.lock:
            recurso = self.recursos.get(identificador)

            if not recurso:
                raise ValueError("Recurso desconocido")

            if time.time() >= recurso["exp"]:
                del self.recursos[identificador]
                raise ValueError("Recurso expirado")

            return recurso["url"]

    def limpiar(self):
        with self.lock:
            return self._limpiar()
