import json

from mongoengine import Document, StringField, DateTimeField
from datetime import datetime
import uuid
# Configura la conexión a MongoDB
from mongoengine import connect, disconnect

connect('jardin_azuayo', host='192.168.1.5', port=27017)

class Chat(Document):
    humanMessage = StringField(required=True)
    systemMessage = StringField(required=True)
    aiMessage = StringField(required=True)
    chatRoom = StringField(required=True)
    createdAt = DateTimeField(default=datetime.now)

    meta = {
        'collection': 'historial_chat',
        'indexes': [
            'chatRoom',
            'createdAt',
        ]
    }

# Chat.create_indexes()

def saveNewChat(system: str, human: str, ai: str, chatRoom: str):
    new_chat = Chat(
        humanMessage=human,
        systemMessage=system,
        aiMessage=ai,
        chatRoom=chatRoom
    )
    new_chat.save()
    # disconnect()
    # Mostrar el documento guardado
    print(f'Nuevo chat creado con ID: {new_chat.id} y fecha: {new_chat.createdAt}')

def get_chats_by_room(room_id: str, limit_chats: int):
    """
    Recupera todos los chats de un chatRoom específico.
    :param room_id: Identificador del cuarto de chat.
    :param limit : Limit of chats
    :return: Lista de documentos Chat.
    """
    fields_to_retrieve = ['humanMessage', 'systemMessage', 'aiMessage']
    chats = Chat.objects(chatRoom=room_id).order_by('-createdAt').limit(limit_chats).only(*fields_to_retrieve)
    print(chats)
    if len(chats) > 0:
        chats_json = [
            {
                "humanMessage": chat.humanMessage,
                "systemMessage": chat.systemMessage,
                "aiMessage": chat.aiMessage,
            }
            for chat in chats
        ]
        return json.dumps(chats_json)
    return list()

