from rest_framework import serializers
from .models import Blogs
from products.models import FeaturedProducts
from products.serializers import FeaturedProductsCustomSerializer


class BlogsSerializer(serializers.ModelSerializer):
    featured_products = serializers.SerializerMethodField(read_only=True)

    class Meta:
        model = Blogs
        fields = [
            "id",
            "created_at",
            "updated_at",
            "date_created",
            "image_banner",
            "title",
            "body",
            "featured_products",
        ]

    def get_featured_products(self, obj: Blogs):
        featured_products = FeaturedProducts.objects.filter(
            model_object_id=obj.id
        ).select_related("product")
        serializer = FeaturedProductsCustomSerializer(featured_products, many=True)
        return serializer.data

    def to_representation(self, instance):
        representation = super().to_representation(instance)

        if instance.body.html:
            representation["body"] = instance.body.html

        return representation


class BlogsCustomSerializer(serializers.Serializer):
    image_banner = serializers.FileField(required=False)
    title = serializers.CharField(max_length=525)
    body = serializers.CharField()
    date_created = serializers.DateTimeField()
    featured_products = serializers.ListField(
        child=serializers.CharField(max_length=1000), required=False
    )
