from rest_framework import serializers
from . import models as blogModel


class CarArticlesListSerializer(serializers.ModelSerializer):
    @staticmethod
    def get_car(obj):
        return {
            "id": obj.car.id if obj.car else None,
            "name": obj.car.name if obj.car else None,
            "brand": obj.brand.name
        }

    @staticmethod
    def get_view(obj):
        return obj.view.count()

    car = serializers.SerializerMethodField("get_car")
    view = serializers.SerializerMethodField()

    class Meta:
        model = blogModel.CarArticle
        fields = ('id', 'title', 'link', 'abstract', 'image', 'brand', 'car', 'view', 'jalali_published')


class CarArticleDetailSerializer(serializers.ModelSerializer):
    view = serializers.SerializerMethodField()

    class Meta:
        model = blogModel.CarArticle
        fields = ('id', 'title', 'link', 'abstract', 'image', 'content', 'brand', 'car', 'type', 'meta_title',
                  'meta_description', 'production_start_year', 'production_end_year', 'view', 'author', 'jalali_published')

    def get_view(self, obj):
        return obj.view.count()


class ProductArticlesListSerializer(serializers.ModelSerializer):
    @staticmethod
    def get_subcategory(obj):
        return {
            "id": obj.subcategory.id,
            "name": obj.subcategory.name,
            "parent": obj.subcategory.parent,
            "category": obj.subcategory.category.name
        }

    @staticmethod
    def get_view(obj):
        return obj.view.count()

    subcategory = serializers.SerializerMethodField("get_subcategory")
    view = serializers.SerializerMethodField()

    class Meta:
        model = blogModel.ProductArticle
        fields = ('id', 'title', 'link', 'abstract', 'image', 'subcategory', 'product', 'view', 'jalali_published')


class ProductArticleDetailSerializer(serializers.ModelSerializer):
    view = serializers.SerializerMethodField()

    class Meta:
        model = blogModel.ProductArticle
        fields = ('id', 'title', 'link', 'abstract', 'image', 'content', 'subcategory', 'product', 'meta_title',
                  'meta_description', 'view', 'author', 'jalali_published')

    def get_view(self, obj):
        return obj.view.count()


class OtherArticlesListSerializer(serializers.ModelSerializer):
    @staticmethod
    def get_view(obj):
        return obj.view.count()

    view = serializers.SerializerMethodField()

    class Meta:
        model = blogModel.Other
        fields = ('id', 'title', 'link', 'abstract', 'image', 'view', 'jalali_published')


class OtherArticleDetailSerializer(serializers.ModelSerializer):
    view = serializers.SerializerMethodField()

    class Meta:
        model = blogModel.Other
        fields = ('id', 'title', 'link', 'abstract', 'image', 'content', 'view', 'meta_title', 'meta_description',
                  'author', 'jalali_published')

    def get_view(self, obj):
        return obj.view.count()


class NewsListSerializer(serializers.ModelSerializer):
    @staticmethod
    def get_view(obj):
        return obj.view.count()

    view = serializers.SerializerMethodField()

    class Meta:
        model = blogModel.News
        fields = ('id', 'title', 'link', 'abstract', 'image', 'view', 'jalali_published')


class NewsDetailSerializer(serializers.ModelSerializer):
    view = serializers.SerializerMethodField()

    class Meta:
        model = blogModel.News
        fields = ('id', 'title', 'link', 'abstract', 'image', 'content', 'view', 'meta_title', 'meta_description',
                  'author', 'jalali_published')

    def get_view(self, obj):
        return obj.view.count()


class CarArticlesIdsListSerializer(serializers.ModelSerializer):
    class Meta:
        model = blogModel.CarArticle
        fields = ('id',)

    def to_representation(self, instance):
        return instance.id


class ProductArticlesIdsListSerializer(serializers.ModelSerializer):
    class Meta:
        model = blogModel.ProductArticle
        fields = ('id',)

    def to_representation(self, instance):
        return instance.id


class OtherArticlesIdsListSerializer(serializers.ModelSerializer):
    class Meta:
        model = blogModel.Other
        fields = ('id',)

    def to_representation(self, instance):
        return instance.id


class NewsIdsListSerializer(serializers.ModelSerializer):
    class Meta:
        model = blogModel.News
        fields = ('id',)

    def to_representation(self, instance):
        return instance.id