from django.test import TestCase
from django.contrib.auth import get_user_model

from chat.repositories.message_repository import MessageRepository
from helpdesk.models import Ticket # จำเป็นต้องสร้าง Ticket ก่อนสร้าง Message
from chat.models import Message

UserModel = get_user_model()

class MessageRepositoryTest(TestCase):

    def setUp(self):
        self.repo = MessageRepository()
        self.user = UserModel.objects.create_user(
            username='msg_user',
            email='msg_user@test.com',
            password='p'
        )
        self.ticket = Ticket.objects.create(
            creator=self.user,
            title="Test Ticket for Message",
        )

    def test_create_message_saves_data_correctly(self):
        """
        WHEN: เรียก create_message ด้วย data ที่ถูกต้อง
        THEN: Message ต้องถูกบันทึกใน DB และมี content ตรงตามที่ส่ง
        """
        content = "Testing message content storage."
        message_type = 'P' # Private Note

        data = {
            'ticket': self.ticket,
            'sender': self.user,
            'content': content,
            'message_type': message_type
        }

        # ACT
        new_message = self.repo.create_message(**data)

        # ASSERT 1 ตรวจสอบว่า Message ถูกสร้างใน DB
        self.assertIsNotNone(new_message.id)
        self.assertEqual(Message.objects.count(), 1)

        # ASSERT 2 ตรวจสอบความถูกต้องของข้อมูลที่ถูกบันทึก
        retrieved_message = Message.objects.get(pk=new_message.id)
        self.assertEqual(retrieved_message.content, content)
        self.assertEqual(retrieved_message.message_type, message_type)
        self.assertEqual(retrieved_message.ticket_id, self.ticket.id)