from rest_framework import serializers
from .models import Review


class ReviewSerializer(serializers.ModelSerializer):
    """Review Serializer"""
    place_name = serializers.CharField(source='place.name', read_only=True)
    user_name = serializers.CharField(source='user.username', read_only=True)
    user_avatar = serializers.CharField(source='user.avatar.url', read_only=True, allow_null=True)
    
    class Meta:
        model = Review
        fields = ['id', 'place', 'place_name', 'user', 'user_name', 'user_avatar', 'rating',
                  'comment', 'images', 'helpful_count', 'is_verified', 'place_response',
                  'place_response_at', 'created_at', 'updated_at']
        read_only_fields = ['id', 'user', 'helpful_count', 'is_verified', 'place_response_at',
                           'created_at', 'updated_at']
    
    def create(self, validated_data):
        validated_data['user'] = self.context['request'].user
        return super().create(validated_data)


class ReviewResponseSerializer(serializers.ModelSerializer):
    """Review Response Serializer (for place admin to respond)"""
    class Meta:
        model = Review
        fields = ['place_response']
    
    def update(self, instance, validated_data):
        from django.utils import timezone
        validated_data['place_response_at'] = timezone.now()
        return super().update(instance, validated_data)

