from rest_framework import serializers
from django.contrib.auth.models import User
from .models import Message

# سریالایزر برای نمایش لیست کاربران در سایدبار چت
class ChatUserSerializer(serializers.ModelSerializer):
    name = serializers.SerializerMethodField()
    avatar = serializers.SerializerMethodField()
    unread_count = serializers.SerializerMethodField()

    class Meta:
        model = User
        fields = ['id', 'username', 'name', 'avatar', 'unread_count']

    def get_name(self, obj):
        full_name = obj.get_full_name()
        return full_name if full_name.strip() else obj.username

    def get_avatar(self, obj):
        try:
            if hasattr(obj, 'profile') and obj.profile.avatar:
                request = self.context.get('request')
                photo_url = obj.profile.avatar.url
                return request.build_absolute_uri(photo_url) if request else photo_url
        except:
            pass
        return None
    
    def get_unread_count(self, obj):
        try:
            request = self.context.get('request')
            if not request: return 0
            
            # پیدا کردن آیدی طرفین
            current_user_id = request.user.id
            other_user_id = obj.id
            
            # ساخت نام اتاق خصوصی
            ids = sorted([current_user_id, other_user_id])
            room_name = f"private_{ids[0]}_{ids[1]}"
            
            # شمارش پیام‌های نخوانده‌ای که فرستنده‌اش این کاربر است
            return Message.objects.filter(
                room__name=room_name, 
                sender=obj, 
                is_read=False
            ).count()
        except:
            return 0
        

# سریالایزر برای پیام‌ها
class MessageSerializer(serializers.ModelSerializer):
    sender_name = serializers.SerializerMethodField()
    sender_avatar = serializers.SerializerMethodField()
    
    # برای تشخیص کاربر در فرانت‌اند
    user_id = serializers.ReadOnlyField(source='sender.id')

    class Meta:
        model = Message
        fields = ['id', 'user_id', 'sender_name', 'sender_avatar', 'content', 'image', 'timestamp', 'is_read']

        
    def get_sender_name(self, obj):
        return obj.sender.get_full_name() or obj.sender.username

    def get_sender_avatar(self, obj):
        try:
            if hasattr(obj.sender, 'profile') and obj.sender.profile.avatar:
                request = self.context.get('request')
                photo_url = obj.sender.profile.avatar.url
                # ساخت آدرس کامل برای آواتار فرستنده پیام
                return request.build_absolute_uri(photo_url) if request else photo_url
        except:
            pass
        return None