import json
from channels.generic.websocket import AsyncWebsocketConsumer
from .models import Message
from datetime import datetime
from asgiref.sync import sync_to_async


class ChatConsumer(AsyncWebsocketConsumer):
    async def connect(self):
        await self.channel_layer.group_add("chat_room", self.channel_name)
        await self.accept()

    async def disconnect(self, close_code):
        await self.channel_layer.group_discard("chat_room", self.channel_name)

    async def receive(self, text_data):
        data = json.loads(text_data)
        username = data['username']
        email = data.get('email')  # ایمیل هم می‌گیریم
        message = data['message']

        # ذخیره پیام به صورت async
        await sync_to_async(Message.objects.create)(
            username=username,
            email=email,
            text=message,
            timestamp=datetime.now()
        )

        # ارسال پیام به کلاینت
        await self.send(text_data=json.dumps({
            'username': username,
            'email': email,
            'message': message,
            'timestamp': datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        }))
    async def chat_message(self, event):
        await self.send(text_data=json.dumps({
            'message': event['message'],
            'username': event['username']
        }))
