from rest_framework import serializers
from django.conf import settings

from portfolio.models import Category, Portfolio


class PortfolioCateSerializer(serializers.ModelSerializer):
    image = serializers.SerializerMethodField()
    parent = serializers.StringRelatedField()

    class Meta:
        model = Portfolio
        fields = ['id', 'url', 'image', 'parent', 'created_at', 'updated_at', 'is_active']

    def get_image(self, obj):
        if obj.image:
            # Sadece path döndür, domain olmadan
            return obj.image.url
        return None


class CategorySerializer(serializers.ModelSerializer):
    parent = serializers.StringRelatedField()  # ID yerine __str__ metodundaki değeri döndürür
    image = serializers.SerializerMethodField()
    portfolio_categories = serializers.SerializerMethodField()  # ManyToMany ilişkisi üzerinden portfolio'ları getir

    class Meta:
        model = Category
        fields = ['id', 'title', 'parent', 'is_active', 'created_at', 'updated_at', 'order', 'slug', 'image',
                  'keywords', 'description', 'portfolio_categories']

    def get_image(self, obj):
        if obj.image:
            # Sadece path döndür, domain olmadan
            return obj.image.url
        return None

    def get_portfolio_categories(self, obj):
        """Category'ye ait portfolio'ları döndürür"""
        portfolios = obj.portfolio_categories.filter(is_active=True).all()
        # Circular import'u önlemek için PortfolioCateSerializer kullanıyoruz
        return PortfolioCateSerializer(portfolios, many=True, context=self.context).data


class PortfolioSerializer(serializers.ModelSerializer):
    categories = CategorySerializer(read_only=True, many=True)
    image = serializers.SerializerMethodField()
    parent = serializers.StringRelatedField()

    class Meta:
        model = Portfolio
        fields = ['id', 'url', 'categories', 'image', 'parent', 'created_at', 'updated_at', 'is_active']

    def get_image(self, obj):
        if obj.image:
            # Sadece path döndür, domain olmadan
            return obj.image.url
        return None
