"""ElevenLabs Conversational-AI (Realtime-Agent) — API-Helfer.

Zieht die vollständigen Gesprächs-Transkripte des Plappi-Agenten von ElevenLabs.
Jeder Turn (Kind + Plappi) wird dort serverseitig protokolliert → das ist unser
detailliertes Log (#3), das wir lokal spiegeln und im Dashboard zeigen.
"""
from __future__ import annotations

import json
import urllib.error
import urllib.parse
import urllib.request

from . import config

API = "https://api.elevenlabs.io"


def _get(path: str):
    req = urllib.request.Request(f"{API}{path}", method="GET")
    req.add_header("xi-api-key", config.ELEVENLABS_API_KEY)
    try:
        with urllib.request.urlopen(req, timeout=40) as r:
            return json.loads(r.read())
    except urllib.error.HTTPError as e:
        raise RuntimeError(f"convai HTTP {e.code}: {e.read().decode()[:200]}") from None


def list_conversations(agent_id: str | None = None, page_size: int = 100) -> list[dict]:
    agent_id = agent_id or config.ELEVENLABS_AGENT_ID
    q = urllib.parse.urlencode({"agent_id": agent_id, "page_size": page_size})
    data = _get(f"/v1/convai/conversations?{q}")
    return data.get("conversations", []) if isinstance(data, dict) else []


def get_conversation(conversation_id: str) -> dict:
    """Volltranskript eines Gesprächs."""
    return _get(f"/v1/convai/conversations/{conversation_id}")


def transcript_turns(conv: dict) -> list[dict]:
    """-> [{role: 'plappi'|'child', text, ts}] aus einem Conversation-Objekt."""
    out = []
    for m in conv.get("transcript", []) or []:
        role = m.get("role", "")
        who = "plappi" if role in ("agent", "assistant") else "child"
        text = (m.get("message") or "").strip()
        if not text:
            continue
        out.append({"role": who, "text": text, "ts": m.get("time_in_call_secs")})
    return out
