from rest_framework import serializers
from .models import ApparelItem, CollectionRecord


class ApparelItemSerializer(serializers.ModelSerializer):
    event_name = serializers.CharField(source='event.name', read_only=True)
    collection_count = serializers.ReadOnlyField()

    class Meta:
        model = ApparelItem
        fields = ['id', 'name', 'description', 'event', 'event_name', 'is_active', 'collection_count', 'created_at', 'updated_at']


class CollectionRecordSerializer(serializers.ModelSerializer):
    apparel_item_name = serializers.CharField(source='apparel_item.name', read_only=True)
    recorded_by_name = serializers.SerializerMethodField()

    class Meta:
        model = CollectionRecord
        fields = [
            'id', 'apparel_item', 'apparel_item_name', 'registration_code',
            'full_name', 'email', 'payment_status', 'collected_at',
            'recorded_by', 'recorded_by_name', 'notes',
        ]
        read_only_fields = ['collected_at']

    def get_recorded_by_name(self, obj):
        if obj.recorded_by:
            return obj.recorded_by.get_full_name() or obj.recorded_by.username
        return None


class ScanApparelSerializer(serializers.Serializer):
    registration_code = serializers.CharField(max_length=100)
    apparel_item_id = serializers.IntegerField()
    notes = serializers.CharField(required=False, allow_blank=True, default='')
