# app/services/chat.py

from sqlalchemy import select, text
from app.models.client import Client
from app.models.visitor import Visitor
from app.models.message import Message
from app.core.database import get_db

class ChatService:
    def __init__(self, db):
        self.db = db

    # ✔ Get Client by client_widget_id
    async def get_client(self, widget_id: str):

        print(">>> widget_id:", widget_id)
        
        result = await self.db.execute( select(Client).where(Client.client_widget_id == widget_id) )

        return result.scalar_one_or_none()

    # ✔ Get/Create visitor
    async def get_or_create_visitor(self, widget_id: str, visitor_uid: str):

        print(">-->---->---->-->", widget_id, visitor_uid)

        # 1. Find client
        client = await self.get_client(widget_id)
        if not client:
            return None

        # 2. Find visitor belonging to this client
        result = await self.db.execute(
            select(Visitor).where( Visitor.visitor_id == visitor_uid, Visitor.client_id == client.id )
        )
        visitor = result.scalar_one_or_none()

        # If visitor does NOT exist → create
        if not visitor:
            visitor = Visitor(
                visitor_id=visitor_uid,
                client_id=client.id,
            )
            self.db.add(visitor)
            await self.db.commit()
            await self.db.refresh(visitor)

        return visitor

    # ✔ Save message
    async def save_message(self, client_id, visitor_id, sender, text):

        print("innnnnnnn", client_id,visitor_id,sender,text )

        msg = Message(
            client_id=client_id,
            visitor_id=visitor_id,
            sender=sender,
            text=text,
        )

        self.db.add(msg)
        await self.db.commit()
        await self.db.refresh(msg)
        return msg
