from rest_framework import serializers
from .models import Notification


class NotificationSerializer(serializers.ModelSerializer):
    """Serializer for notifications"""
    sender_name = serializers.CharField(source='sender.full_name', read_only=True, allow_null=True)
    sender_photo = serializers.SerializerMethodField()
    time_ago = serializers.SerializerMethodField()

    class Meta:
        model = Notification
        fields = [
            'id', 'recipient', 'sender', 'sender_name', 'sender_photo',
            'notification_type', 'title', 'message', 'link',
            'product_id', 'comment_id', 'is_read', 'created_at', 'time_ago'
        ]
        read_only_fields = ['id', 'recipient', 'sender', 'created_at']

    def get_sender_photo(self, obj):
        if obj.sender and obj.sender.profile_photo:
            request = self.context.get('request')
            if request:
                return request.build_absolute_uri(obj.sender.profile_photo.url)
            return obj.sender.profile_photo.url
        return None

    def get_time_ago(self, obj):
        from django.utils import timezone
        from datetime import timedelta

        now = timezone.now()
        diff = now - obj.created_at

        if diff < timedelta(minutes=1):
            return 'Just now'
        elif diff < timedelta(hours=1):
            minutes = int(diff.total_seconds() / 60)
            return f'{minutes}m ago'
        elif diff < timedelta(days=1):
            hours = int(diff.total_seconds() / 3600)
            return f'{hours}h ago'
        elif diff < timedelta(days=7):
            days = diff.days
            return f'{days}d ago'
        else:
            return obj.created_at.strftime('%b %d')
