from django.db import models
from django.conf import settings

User = settings.AUTH_USER_MODEL


class ChatRoom(models.Model):
    user = models.ForeignKey(
        User,
        on_delete=models.CASCADE,
        related_name="chat_rooms",
        verbose_name="کاربر"
    )
    subject = models.CharField(max_length=200, blank=True, null=True, verbose_name="موضوع")

    # اتصال اختیاری به محصول
    product = models.ForeignKey(
        "product_module.Product",
        on_delete=models.SET_NULL,
        null=True,
        blank=True,
        related_name="chat_rooms",
        verbose_name="محصول"
    )

    # اتصال اختیاری به سفارش
    order = models.ForeignKey(
        "order_module.Order",
        on_delete=models.SET_NULL,
        null=True,
        blank=True,
        related_name="chat_rooms",
        verbose_name="سفارش"
    )

    is_closed = models.BooleanField(default=False, verbose_name="بسته شده")
    created_at = models.DateTimeField(auto_now_add=True, verbose_name="تاریخ ایجاد")
    updated_at = models.DateTimeField(auto_now=True, verbose_name="آخرین بروزرسانی")

    class Meta:
        verbose_name = "اتاق گفتگو"
        verbose_name_plural = "اتاق‌های گفتگو"
        ordering = ["-updated_at"]

    def __str__(self):
        title = self.subject or f"گفتگو #{self.id}"
        return f"{title} - {self.user}"


class ChatMessage(models.Model):
    room = models.ForeignKey(
        ChatRoom,
        on_delete=models.CASCADE,
        related_name="messages",
        verbose_name="اتاق"
    )
    sender = models.ForeignKey(
        User,
        on_delete=models.CASCADE,
        related_name="sent_chat_messages",
        verbose_name="فرستنده"
    )
    message = models.TextField(verbose_name="متن پیام")
    is_seen = models.BooleanField(default=False, verbose_name="دیده شده")
    created_at = models.DateTimeField(auto_now_add=True, verbose_name="تاریخ ارسال")

    class Meta:
        verbose_name = "پیام"
        verbose_name_plural = "پیام‌ها"
        ordering = ["created_at"]

    def __str__(self):
        return f"پیام #{self.id} - اتاق #{self.room_id}"
