# reunioes/views_egress.py
import json
import requests
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
from django.conf import settings
import jwt
import time

# API Keys
LIVEKIT_API_KEY = getattr(settings, "LIVEKIT_API_KEY", "APIJK8nTcNANfTX")
LIVEKIT_API_SECRET = getattr(settings, "LIVEKIT_API_SECRET", "cRwOxXlflTc1THe4Y1rp0v8ZBvznzvU4ynTS5fvdzDIB")
LIVEKIT_EGRESS_URL = "http://127.0.0.1:8085"

# Iniciar gravação
@csrf_exempt
def iniciar_gravacao(request):
    if request.method != 'POST':
        return JsonResponse({'error': 'Método inválido'}, status=405)
    try:
        body = json.loads(request.body)
        room_name = body.get('room_name')

        if not room_name:
            return JsonResponse({'error': 'room_name ausente'}, status=400)

        # Gera token JWT para autorização
        token = jwt.encode(
            {"iss": LIVEKIT_API_KEY, "aud": "livekit", "exp": int(time.time()) + 60},
            LIVEKIT_API_SECRET,
            algorithm="HS256"
        )

        # URL correta do Egress Service
        url = f"{LIVEKIT_EGRESS_URL}/twirp/livekit.Egress/StartRoomCompositeEgress"

        headers = {
            "Authorization": f"Bearer {token}",
            "Content-Type": "application/json",
        }

        payload = {
            "room_name": room_name,
            "layout": {"template": "grid"},
            "file_outputs": [
                {
                    "file_type": "MP4",
                    "filepath": f"/out/{room_name}_{int(time.time())}.mp4",
                }
            ],
        }

        # Agora enviar o POST para o egress
        response = requests.post(url, headers=headers, json=payload, timeout=10)

        # Se deu erro HTTP (como 405), já dispara exceção
        response.raise_for_status()

        response_data = response.json()
        return JsonResponse({"egress_id": response_data.get('egress_id', '')})

    except requests.exceptions.HTTPError as http_err:
        return JsonResponse({'error': f"Erro no egress HTTP: {str(http_err)}"}, status=500)
    except Exception as e:
        return JsonResponse({'error': f"Erro geral no egress: {str(e)}"}, status=500)

# Parar gravação
@csrf_exempt
def parar_gravacao(request):
    if request.method != 'POST':
        return JsonResponse({'error': 'Método inválido'}, status=405)
    try:
        body = json.loads(request.body)
        egress_id = body.get('egress_id')

        if not egress_id:
            return JsonResponse({'error': 'egress_id ausente'}, status=400)

        token = jwt.encode(
            {"iss": LIVEKIT_API_KEY, "aud": "livekit", "exp": int(time.time()) + 60},
            LIVEKIT_API_SECRET,
            algorithm="HS256"
        )

        url = f"{LIVEKIT_EGRESS_URL}/twirp/livekit.Egress/StopEgress"
        headers = {
            "Authorization": f"Bearer {token}",
            "Content-Type": "application/json",
        }

        payload = {"egress_id": egress_id}

        response = requests.post(url, headers=headers, json=payload, timeout=10)
        response.raise_for_status()

        response_data = response.json()
        return JsonResponse(response_data)

    except requests.exceptions.HTTPError as http_err:
        return JsonResponse({'error': f"Erro ao parar egress HTTP: {str(http_err)}"}, status=500)
    except Exception as e:
        return JsonResponse({'error': f"Erro geral ao parar egress: {str(e)}"}, status=500)
