import os
from django.db import models
from django.contrib.auth.models import User


# تابع برای تعیین مسیر ذخیره عکس: media/chat_images/USERNAME/filename
def chat_file_path(instance, filename):
    return f'chat_images/{instance.sender.username}/{filename}'


class Room(models.Model):
    ROOM_TYPES = (
        ('public', 'عمومی'),
        ('private', 'خصوصی'),
    )
    # نام اتاق یکتاست. مثلا برای گروه عمومی اسمش میشه "general"
    # برای چت خصوصی بین کاربر 1 و 2 اسمش میشه "private_1_2"
    name = models.CharField(max_length=255, unique=True)
    room_type = models.CharField(max_length=10, choices=ROOM_TYPES, default='public')
    
    # لیست اعضا (برای چت خصوصی ۲ نفر، برای عمومی خالی یا همه)
    members = models.ManyToManyField(User, related_name='chat_rooms', blank=True)

    def __str__(self):
        return f"{self.name} ({self.get_room_type_display()})"

class Message(models.Model):
    room = models.ForeignKey(Room, on_delete=models.CASCADE, related_name='messages')
    sender = models.ForeignKey(User, on_delete=models.CASCADE, related_name='sent_messages')
    content = models.TextField()
    timestamp = models.DateTimeField(auto_now_add=True)
    is_read = models.BooleanField(default=False)
    image = models.ImageField(upload_to=chat_file_path, blank=True, null=True)
    
    class Meta:
        ordering = ('timestamp',) 

    def __str__(self):
        return f"{self.sender.username}: {self.content[:20]}..."