from rest_framework import serializers
from api.property_api.property.models.property import Property
from api.property_api.property_details.serializers.property_details_serializer import PropertyDetailsSerializer
from api.property_api.property_media.serializers.property_media_serializer import PropertyMediaSerializer
from api.property_api.property_nearby_facilities.serializers.property_nearby_facilities_serializer import PropertyNearbyFacilitiesSerializer

class PropertySerializer(serializers.ModelSerializer):
    id = serializers.ReadOnlyField()
    property = PropertyDetailsSerializer(many=True, read_only=True)
    media = PropertyMediaSerializer(many=True, read_only=True)
    property_facilities = PropertyNearbyFacilitiesSerializer(read_only=True,many=True)
    # Nearby facility relationship between property and nearby facilities in property_id
    # property_id = PropertyNearbyFacilitiesSerializer(many=True, read_only=True)

    class Meta:
        model = Property
        fields = [
            'id', 'name', 'address', 'per_sqr_ft_price','agent', 'description', 'listed_for', 'country', 'city', 'state',
            'is_active', 'created_at', 'updated_at',
            'created_by', 'updated_by', 'property', 'media','is_related','property_facilities','is_flagged','contact_number',
            'country_name', 'state_name', 'district_name', 'postal_code','category_type','google_map'
        ]
        read_only_fields = ['id', 'created_at', 'updated_at','property','media','property_facilities','is_flagged','agent']
        extra_kwargs = {
            'country': {'required': False, 'allow_null': True},
            'state': {'required': False, 'allow_null': True},
            'city': {'required': False, 'allow_null': True},
        }

    def create(self, validated_data):
        request = self.context.get('request')
        user = request.user

        if hasattr(user, 'agent'):
            validated_data['agent'] = user.agent
            
        return super().create(validated_data)


class PropertyDropdownSerializer(serializers.ModelSerializer):
    id = serializers.ReadOnlyField()

    class Meta:
        model = Property
        fields = ['id','name']
        read_only_fields = ['id']
