# reunioes/utils/livekit.py
import os, time, jwt

LIVEKIT_API_KEY    = os.getenv("LIVEKIT_API_KEY",    "APIJK8nTcNANfTX")
LIVEKIT_API_SECRET = os.getenv("LIVEKIT_API_SECRET", "cRwOxXlflTc1THe4Y1rp0v8ZBvznzvU4ynTS5fvdzDIB")


# ──────────────────────────────────────────────────────────────────────
# 1. Token de participante / convidado / host
# ──────────────────────────────────────────────────────────────────────
def gerar_token_reuniao(*, room: str, user: str, can_publish: bool = False) -> str:
    """
    • room:  código/slug da sala
    • user:  identidade (host ou convidado)
    • can_publish: libera ou não câmera+microfone logo de cara
    """
    now = int(time.time())
    payload = {
        "iss": LIVEKIT_API_KEY,     # ← APENAS VIA VAR AMBIENTE
        "sub": user,
        "aud": "livekit",
        "nbf": now,
        "exp": now + 3_600,         # 1 h – ajuste conforme necessidade
        "room": room,
        "video": {
            "roomJoin": True,
            "roomCreate": True,
            "canPublish":      can_publish,
            "canPublishData":  True,     # necessário p/ chat (DataChannel)
            "canSubscribe":    True
        }
    }
    return jwt.encode(payload, LIVEKIT_API_SECRET, algorithm="HS256")


# ──────────────────────────────────────────────────────────────────────
# 2. Token administrativo (UpdateParticipant / DeleteRoom …)
# ──────────────────────────────────────────────────────────────────────
def gerar_token_admin(ttl_seconds: int = 30) -> str:
    """
    Token curto para chamadas REST administrativas (RoomService.*).
    """
    now = int(time.time())
    payload = {
        "iss": LIVEKIT_API_KEY,
        "aud": "livekit",
        "nbf": now,
        "exp": now + ttl_seconds,
        # "name": opcional – descrição/referência
    }
    return jwt.encode(payload, LIVEKIT_API_SECRET, algorithm="HS256")
