from sqlalchemy.orm import Session
from typing import List, Optional
from uuid import UUID
from ..models.chat_message import ChatMessage as ChatMessageModel
import json


class ChatService:
    def __init__(self, db: Session):
        self.db = db
    
    def create_chat_message(
        self,
        stream_id: UUID,
        username: str,
        message: str,
        timestamp_offset: float,
        color: str = "#9146FF",
        emotes: Optional[List[dict]] = None,
        badges: Optional[List[dict]] = None,
        user_avatar_url: Optional[str] = None
    ) -> ChatMessageModel:
        """Create a chat message"""
        chat_message = ChatMessageModel(
            stream_id=stream_id,
            username=username,
            message=message,
            timestamp_offset=timestamp_offset,
            color=color,
            emotes=emotes or [],
            badges=badges or [],
            user_avatar_url=user_avatar_url
        )
        self.db.add(chat_message)
        self.db.commit()
        self.db.refresh(chat_message)
        return chat_message
    
    def get_chat_messages(self, stream_id: UUID) -> List[ChatMessageModel]:
        """Get all chat messages for a stream"""
        return self.db.query(ChatMessageModel).filter(
            ChatMessageModel.stream_id == stream_id
        ).order_by(ChatMessageModel.timestamp_offset).all()
    
    def delete_chat_messages(self, stream_id: UUID):
        """Delete all chat messages for a stream"""
        self.db.query(ChatMessageModel).filter(
            ChatMessageModel.stream_id == stream_id
        ).delete()
        self.db.commit()
