from django.db import models
from users.models import User


class Chat(models.Model):
    name = models.CharField(max_length=255, blank=True, null=True, verbose_name='Название чата')
    is_group = models.BooleanField(default=False, verbose_name='Групповой чат')
    participants = models.ManyToManyField(User, related_name='chats', verbose_name='Участники')
    created_by = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, related_name='created_chats', verbose_name='Создатель')
    created_at = models.DateTimeField(auto_now_add=True, verbose_name='Дата создания')
    updated_at = models.DateTimeField(auto_now=True, verbose_name='Дата обновления')

    def __str__(self):
        if self.is_group and self.name:
            return self.name
        else:
            other = self.participants.exclude(id=self.created_by.id).first()
            if other:
                return f"Чат с {other.last_name} {other.first_name}"
            return "Чат"

    class Meta:
        ordering = ['-updated_at']
        verbose_name = 'Чат'
        verbose_name_plural = 'Чаты'


class Message(models.Model):
    chat = models.ForeignKey(Chat, on_delete=models.CASCADE, related_name='messages', verbose_name='Чат')
    sender = models.ForeignKey(User, on_delete=models.CASCADE, related_name='sent_messages', verbose_name='Отправитель')
    text = models.TextField(verbose_name='Текст сообщения')
    is_read = models.BooleanField(default=False, verbose_name='Прочитано')
    created_at = models.DateTimeField(auto_now_add=True, verbose_name='Дата отправки')

    def __str__(self):
        # Пытаемся получить имя отправителя
        if hasattr(self.sender, 'student') and self.sender.student:
            name = f"{self.sender.student.last_name} {self.sender.student.first_name}"
        elif hasattr(self.sender, 'teacher') and self.sender.teacher:
            name = f"{self.sender.teacher.last_name} {self.sender.teacher.first_name}"
        else:
            name = self.sender.email
        return f"{name}: {self.text[:50]}"

    class Meta:
        ordering = ['created_at']
        verbose_name = 'Сообщение'
        verbose_name_plural = 'Сообщения'