from rest_framework import serializers
from .models import Photo, Category, Album

class CategorySerializer(serializers.ModelSerializer):
    class Meta:
        model = Category
        fields = ['id', 'name']

class AlbumSerializer(serializers.ModelSerializer):
    photo_count = serializers.ReadOnlyField()
    cover_photo_url = serializers.SerializerMethodField()
    
    class Meta:
        model = Album
        fields = ['id', 'title', 'description', 'cover_photo', 'cover_photo_url', 'photo_count', 'created_at', 'updated_at']
        read_only_fields = ['created_at', 'updated_at']
    
    def get_cover_photo_url(self, obj):
        if obj.cover_photo:
            return obj.cover_photo.image.url
        elif obj.photos.exists():
            return obj.photos.first().image.url
        return None

class PhotoSerializer(serializers.ModelSerializer):
    category_details = CategorySerializer(source='category', read_only=True)
    album_ids = serializers.PrimaryKeyRelatedField(
        many=True, 
        queryset=Album.objects.all(), 
        source='albums', 
        required=False
    )
    
    class Meta:
        model = Photo
        fields = ['id', 'title', 'image', 'thumbnail', 'category', 'category_details', 
                  'albums', 'album_ids', 'uploaded_at', 'is_favorite', 'width', 'height']
        read_only_fields = ['thumbnail', 'width', 'height', 'uploaded_at']

