"""Репозиторий доступа к сообщениям чата (`chat_messages`)."""

import uuid

from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession

from models.chat import ChatMessage


class ChatMessageRepository:
    """Инкапсулирует SQL-запросы к сообщениям чата конкретной сессии конференции."""

    def __init__(self, session: AsyncSession) -> None:
        self._session = session

    async def add(
        self,
        *,
        session_id: uuid.UUID,
        user_id: uuid.UUID | None,
        guest_access_id: uuid.UUID | None,
        author_name: str,
        text: str,
    ) -> ChatMessage:
        """Добавить сообщение чата и вернуть строку с проставленными `id`/`created_at`."""
        message = ChatMessage(
            session_id=session_id,
            user_id=user_id,
            guest_access_id=guest_access_id,
            author_name=author_name,
            text=text,
        )
        self._session.add(message)
        await self._session.flush()
        return message

    async def last_for_session(self, session_id: uuid.UUID, *, limit: int) -> list[ChatMessage]:
        """Последние `limit` сообщений сессии в хронологическом порядке (от старых к новым)."""
        result = await self._session.execute(
            select(ChatMessage)
            .where(ChatMessage.session_id == session_id)
            .order_by(ChatMessage.created_at.desc())
            .limit(limit)
        )
        rows = list(result.scalars().all())
        rows.reverse()
        return rows
