# api/user/serializers.py
from rest_framework import serializers
from .models import UserProfile
from django.contrib.auth.models import User


class UserProfileSerializer(serializers.ModelSerializer):
    class Meta:
        model = UserProfile
        fields = ["show_mature"]

    def update(self, instance, validated_data):
        # Use setattr to assign values to the instance fields
        for attr, value in validated_data.items():
            setattr(instance, attr, value)
        instance.save()  # Save the changes to the database
        return instance


class UserSerializer(serializers.ModelSerializer):
    profile = UserProfileSerializer(source="userprofile", read_only=False)

    class Meta:
        model = User
        fields = ["username", "email", "first_name", "last_name", "profile"]

    def update(self, instance, validated_data):
        # Extract profile data if it exists
        profile_data = validated_data.pop("userprofile", None)

        # Update the UserProfile instance
        if profile_data:
            userprofile_instance = instance.userprofile  # The related UserProfile instance
            profile_serializer = self.fields["profile"]  # Get the nested serializer
            profile_serializer.update(userprofile_instance, profile_data)  # Update the UserProfile

        # Update the User fields
        for attr, value in validated_data.items():
            setattr(instance, attr, value)
        instance.save()  # Save the User instance
        return instance