from rest_framework import serializers
from .models import Notification, NotificationCategory, NotificationTag, SiteStatistic


class NotificationCategorySerializer(serializers.ModelSerializer):
    class Meta:
        model = NotificationCategory
        fields = ['id', 'name', 'description', 'color_code']


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


class NotificationListSerializer(serializers.ModelSerializer):
    """Serializer for listing notifications (minimal data)"""
    category = NotificationCategorySerializer(read_only=True)
    tags = serializers.SerializerMethodField()
    date = serializers.SerializerMethodField()
    
    class Meta:
        model = Notification
        fields = [
            'id', 'title', 'description', 'slug', 'published_date', 
            'date', 'category', 'priority', 'is_featured', 'tags'
        ]
    
    def get_tags(self, obj):
        return [tag.tag.name for tag in obj.notification_tags.all()]
    
    def get_date(self, obj):
        return obj.formatted_date


class NotificationDetailSerializer(serializers.ModelSerializer):
    """Serializer for detailed notification view"""
    category = NotificationCategorySerializer(read_only=True)
    tags = serializers.SerializerMethodField()
    date = serializers.SerializerMethodField()
    
    class Meta:
        model = Notification
        fields = [
            'id', 'title', 'description', 'content', 'slug', 
            'published_date', 'date', 'category', 'priority', 
            'is_featured', 'external_link', 'attachment', 
            'meta_description', 'tags', 'created_at', 'updated_at'
        ]
    
    def get_tags(self, obj):
        return NotificationTagSerializer([tag.tag for tag in obj.notification_tags.all()], many=True).data
    
    def get_date(self, obj):
        return obj.formatted_date


class SiteStatisticSerializer(serializers.ModelSerializer):
    class Meta:
        model = SiteStatistic
        fields = ['id', 'name', 'value', 'description', 'icon', 'order']


class NotificationStatsResponseSerializer(serializers.Serializer):
    """Combined response serializer for notifications and stats"""
    notifications = NotificationListSerializer(many=True)
    statistics = SiteStatisticSerializer(many=True)
    pagination = serializers.DictField()
