"""Тонкая обёртка над LiveKit `RoomService` — единственная точка для мокирования в тестах.

Используется maintenance-задачей автоосвобождения комнат (`workers/tasks/
maintenance.py`). Вынесена в отдельный модуль намеренно: реальный HTTP-вызов
к LiveKit не нужен и не воспроизводим в тестах — тесты подменяют
`delete_livekit_room` целиком.
"""

import logging

from livekit import api

from core.config import get_settings

logger = logging.getLogger(__name__)


async def delete_livekit_room(room_name: str) -> None:
    """Удалить LiveKit-комнату по имени (= `rooms.permanent_link`), отключив всех участников.

    Идемпотентно: удаление уже отсутствующей комнаты — не ошибка (LiveKit
    отвечает `TwirpError`/`ServerError` с `code == "not_found"`, который
    здесь поглощается; см. документацию `livekit-api` RoomService).
    """
    settings = get_settings()
    lkapi = api.LiveKitAPI(
        settings.livekit_url,
        api_key=settings.livekit_api_key,
        api_secret=settings.livekit_api_secret,
    )
    try:
        await lkapi.room.delete_room(api.DeleteRoomRequest(room=room_name))
    except api.TwirpError as exc:
        if exc.code != "not_found":
            raise
        logger.info("delete_livekit_room: комната %s уже отсутствует в LiveKit", room_name)
    finally:
        await lkapi.aclose()
