from rest_framework import serializers


ALLOWED_EVENT_TYPES = {
    'recommendation_impression',
    'recommendation_click',
    'reorder_click',
    'bundle_upgrade_click',
    'marketplace_product_click',
    'notification_open',
    'widget_interaction',
    'wallet_usage',
    'checkout_start',
    'checkout_complete',
    'api_timing',
    'frontend_perf',
    'client_error',
    'notification_delivery_failure',
    'page_view',
}


class TelemetryEventIngestSerializer(serializers.Serializer):
    event_type = serializers.CharField(max_length=64)
    timestamp = serializers.DateTimeField(required=False)
    session = serializers.CharField(max_length=128, required=False, allow_blank=True)
    device = serializers.CharField(max_length=64, required=False, allow_blank=True)
    page = serializers.CharField(max_length=255, required=False, allow_blank=True)
    metadata = serializers.DictField(required=False)
    client_event_id = serializers.CharField(max_length=128, required=False, allow_blank=True)

    def validate_event_type(self, value):
        value = value.strip()
        if value not in ALLOWED_EVENT_TYPES:
            raise serializers.ValidationError('Unsupported event_type')
        return value


class TelemetryBulkIngestSerializer(serializers.Serializer):
    events = TelemetryEventIngestSerializer(many=True)
    source = serializers.CharField(max_length=32, required=False, allow_blank=True)


class TelemetryAlertResolveSerializer(serializers.Serializer):
    alert_ids = serializers.ListField(
        child=serializers.UUIDField(),
        required=False,
        default=list,
    )
