from rest_framework import serializers
from .models import CPDConfiguration
from apps.events.models import Event


class CPDConfigurationSerializer(serializers.ModelSerializer):
    event_name = serializers.CharField(source='event.name', read_only=True)
    
    class Meta:
        model = CPDConfiguration
        fields = ['id', 'event', 'event_name', 'cpd_points', 'created_at', 'updated_at']
        read_only_fields = ['created_at', 'updated_at']


class CPDExportRequestSerializer(serializers.Serializer):
    event_id = serializers.IntegerField(required=True)
    cpd_points = serializers.DecimalField(max_digits=5, decimal_places=2, required=False, allow_null=True)
    
    def validate_event_id(self, value):
        if not Event.objects.filter(id=value).exists():
            raise serializers.ValidationError("Event does not exist")
        return value


class BulkLookupRequestSerializer(serializers.Serializer):
    file = serializers.FileField(required=True)
    cpd_points = serializers.DecimalField(max_digits=5, decimal_places=2, required=False, allow_null=True)
    
    def validate_file(self, value):
        # Check file extension
        filename = value.name.lower()
        if not (filename.endswith('.csv') or filename.endswith('.xlsx') or filename.endswith('.xls')):
            raise serializers.ValidationError("File must be CSV or Excel format (.csv, .xlsx, .xls)")
        
        # Check file size (max 5MB)
        if value.size > 5 * 1024 * 1024:
            raise serializers.ValidationError("File size must be less than 5MB")
        
        return value
