
from asyncore import read
from calendar import month
from dataclasses import field
from itertools import count
from multiprocessing import context
import re
# from typing_extensions import Required
from rest_framework import serializers
from .models import*
from django.db.models import Sum,Avg,Max,Min,Count,F,Q

class MagazineCategorySerializer(serializers.ModelSerializer):
    class Meta:
        model = MagazineCategory
        # fields = ['id','first_name','last_name','username','email','exp_otp_datetime','phone_number','country_code','otp']
        fields = '__all__'
    
class SystemCategorySerializer(serializers.ModelSerializer):
    class Meta:
        model = SystemCategory
        # fields = ['id','first_name','last_name','username','email','exp_otp_datetime','phone_number','country_code','otp']
        fields = ('id','category_name')
    

# promotional magazineS
class MagazineInfoSerializer(serializers.ModelSerializer):
    class Meta:
        model = MagazineInfo
        fields = ['id','cover_pic','is_aproved','is_active','name','ratting','rent_price','buy_price','description','background_first_color','background_second_color','issue_date','system_category','magazine_category','create_on','updated_on']
        # fields = '__all__'


#magazine author
class AuthorSerializer(serializers.ModelSerializer):
    class Meta:
        model = Author
        fields = ['id','author_name']
 
 # magazine bt System category
class MagazinebySystemSerializer(serializers.ModelSerializer):
    frequency = serializers.SerializerMethodField()
    is_favorite = serializers.SerializerMethodField()
    authors = serializers.SerializerMethodField()
    class Meta:
        model = MagazineInfo
        # fields = '__all__'
        fields = ['id','cover_pic','is_aproved','is_active','name','ratting','rent_price','buy_price','description','background_first_color','background_second_color','issue_date','published_date','frequency','total_page','authors','is_favorite','create_on','updated_on']

    def get_frequency(self,obj):
        try:
            if obj.frequency=="W":
                return "Weekly"
            elif obj.frequency=="Y":
                return "Yearly"
            elif obj.frequency=="Q":
                return "Quaterly"
            elif obj.frequency=="H":
                return "Half Yearly"
            elif obj.frequency=="M":
                return "Monthly"
            return None
        except MagazineInfo.DoesNotExist:
            return None

    def get_is_favorite(self, obj):
        # auth = Author.objects.filter(id=obj.author_id).all()

        if obj:
            user_id = self.context.get('user_id')
            if user_id:
                mag_fav = MagazineFavorite.objects.filter(users=user_id,magazines=obj.id).count()
                if mag_fav:

                    return True
                else:
                    return False
            #return obj.is_favorite
        return False

    # def get_authors(self, obj):
    #     auth = Author.objects.filter(id=obj.author_id).all()
    #     if auth:
    #         return AuthorSerializer(auth,many=True).data
    #     return None

    def get_authors(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.id,is_aproved=True,is_active=True).values_list('id',flat=True)
        maputhorobj = MagMapAuthor.objects.filter(magazine__in=magazineobj)
        authordata = PTestmagazineSerializer(maputhorobj,many=True)
        if authordata:
            return authordata.data
        return None

class SystemCategorySerializer(serializers.ModelSerializer):
    system_category_id = serializers.SerializerMethodField()
    system_category_name = serializers.SerializerMethodField()
    magazine = serializers.SerializerMethodField()
    class Meta:
        model = SystemCategory
        fields = ('system_category_id','system_category_name','magazine')

    def get_system_category_id(self, obj):
        return obj.id
        
    def get_system_category_name(self, obj):
        return obj.category_name

    # magine list based on system category.

    def get_magazine(self, obj):
        magazineinfo = MagazineInfo.objects.filter(system_category=obj.id,is_aproved=True,is_active=True).all()
        return MagazinebySystemSerializer(magazineinfo,many=True,context={'user_id':self.context.get('user_id')},).data
        
#############################################################
class SystemppCategorySerializer(serializers.ModelSerializer):
    magazine_category_id = serializers.SerializerMethodField()
    magazine_category_name = serializers.SerializerMethodField()
    magazine = serializers.SerializerMethodField()
    class Meta:
        model = MagazineCategory
        fields = ('magazine_category_id','magazine_category_name','magazine')

    def get_magazine_category_id(self, obj):
        return obj.id
        
    def get_magazine_category_name(self, obj):
        return obj.category_name

    # magine list based on system category.

    def get_magazine(self, obj):
        magazineinfo = MagazineInfo.objects.filter(magazine_category=obj.id,is_aproved=True,is_active=True).all()
        return MagazinebySystemSerializer(magazineinfo,many=True).data
########################################################
class SystemAndMagazineDetailsSerializer(serializers.ModelSerializer):
    magazine = serializers.SerializerMethodField()
    system_category = serializers.SerializerMethodField()
    magazine_category = serializers.SerializerMethodField()
    class Meta:
        model = MagazineInfo
        fields = ['system_category','magazine_category','magazine']

    def get_magazine_category(self, obj):
        return self.context.get('magazine_category_id')

    def get_system_category(self, obj):
        return self.context.get('system_category_id')

    def get_magazine(self, obj):
        user_id = self.context.get('user_id')
        system_category_id = self.context.get('system_category_id')
        magazine_category_id = self.context.get('magazine_category_id')
        mangine = MagazineInfo.objects.filter(system_category=system_category_id,magazine_category=magazine_category_id,is_aproved=True,is_active=True).all()
        return MagazinebySystemSerializer(mangine, many=True,context={'user_id':user_id}).data
       

# magazine bookmark pages
class MagazinebookmarkSerializer(serializers.ModelSerializer):
    class Meta:
        model = MagazineBookmark
        # fields = '__all__'
        fields = ['page_number']

# magazine pages
class MegazinePagesSerializer(serializers.ModelSerializer):
    class Meta:
        model = MegazinePages
        # fields = '__all__'
        fields = ['pages']

# magazine Detail serializer
class MagazineDetailSerializer(serializers.ModelSerializer):
    system_category_name = serializers.SerializerMethodField()
    magazine_category_name = serializers.SerializerMethodField()
    authors = serializers.SerializerMethodField()
    pages = serializers.SerializerMethodField()
    magazine_url = serializers.SerializerMethodField()
    frequency = serializers.SerializerMethodField()
    is_bookmark = serializers.SerializerMethodField()
    is_favorite = serializers.SerializerMethodField()
    class Meta:
        model = MagazineInfo
        # fields = '__all__'
        fields = ['id','magazine_url','is_aproved','is_active','is_purchase','cover_pic','name','ratting','rent_price','buy_price','description','background_first_color','background_second_color','reads','authors','published_date','frequency','system_category_name','magazine_category_name','is_bookmark','is_favorite','pages','users','create_on','updated_on']

    def get_is_bookmark(self,obj):
        bookmarkobj=MagazineBookmark.objects.filter(magazines=obj.id).last()
        if obj.id and bookmarkobj:
            statusbookmark=MagazineInfo.objects.filter(id=obj.id).update(is_bookmark=True)
            if statusbookmark==1:
                return True
            return False 
        else:
            return False

    def get_is_favorite(self,obj):
        favoritreobj=MagazineFavorite.objects.filter(magazines=obj.id).last()
        if obj.id and favoritreobj:
            statusfavoritre=MagazineInfo.objects.filter(id=obj.id).update(is_favorite=True)
            if statusfavoritre==1:
                return True
            return False 
        else:
            return False

    def get_frequency(self,obj):
        try:
            if obj.frequency=="W":
                return "Weekly"
            elif obj.frequency=="Y":
                return "Yearly"
            elif obj.frequency=="Q":
                return "Quaterly"
            elif obj.frequency=="H":
                return "Half Yearly"
            elif obj.frequency=="M":
                return "Monthly"
            return None
        except MagazineInfo.DoesNotExist:
            return None

    def get_magazine_url(self,obj):
        try:
            if obj.id:
                magazineobj=MegazinePages.objects.filter(magazine=obj.id).last()
                if magazineobj:
                    serializer = MegazinePagesSerializer(magazineobj).data
                    return serializer
                return None
            return None
        except MagazineInfo.DoesNotExist:
            return None

    # def get_is_purchase(self,obj):
    #     try:
    #         purchaseobj=MagazinePurchaseInfo.objects.filter(magazineInfos=obj.id).last()
    #         print(purchaseobj.magazineInfos.id,'===')
    #         purchase_status=MagazineInfo.objects.filter(id=purchaseobj.magazineInfos.id).last()
    #         if purchase_status:
    #             purchase_condition=MagazineInfo.objects.filter(id=purchaseobj.magazineInfos.id).update(is_purchase=True)
    #             return purchase_condition
    #         else:
    #             purchase_condition=MagazineInfo.objects.filter(id=purchaseobj.magazineInfos.id).update(is_purchase=False)
    #             return purchase_condition
    #     except MagazineInfo.DoesNotExist:
    #         return None

            # print(purchaseobj.is_purchase,'===data')
            # return purchaseobj.is_purchase
        # if systemobj:
        # return None

    def get_system_category_name(self,obj):
        if obj.system_category:
            systemobj=SystemCategory.objects.filter(id=obj.system_category.id).last()
            return systemobj.category_name
        # if systemobj:
        return None

    def get_magazine_category_name(self,obj):
        if obj.system_category:
            magazineobj=MagazineCategory.objects.filter(id=obj.magazine_category.id).last()
            # if magazineobj:
            return magazineobj.category_name
        return None

    def get_authors(self, obj):
        auth = Author.objects.filter(id=obj.author_id).all()
        if auth:
            return AuthorSerializer(auth,many=True).data
        return None

    def get_pages(self, obj):
        pageobj = MagazineBookmark.objects.filter(magazines=obj.id).values()
        if pageobj:
            return MagazinebookmarkSerializer(pageobj,many=True).data
        return None

#Today magazine detail
class DetailSerializer(serializers.ModelSerializer):
    system_category_name = serializers.SerializerMethodField()
    magazine_category_name = serializers.SerializerMethodField()
    authors = serializers.SerializerMethodField()
    pages = serializers.SerializerMethodField()
    magazine_url = serializers.SerializerMethodField()
    frequency = serializers.SerializerMethodField()
    is_bookmark = serializers.SerializerMethodField()
    is_favorite = serializers.SerializerMethodField()
    class Meta:
        model = MagazineInfo
        # fields = '__all__'
        fields = ['id','magazine_url','is_aproved','is_active','is_purchase','cover_pic','name','ratting','rent_price','buy_price','description','background_first_color','background_second_color','reads','authors','published_date','frequency','system_category_name','magazine_category_name','is_bookmark','is_favorite','pages','users','create_on','updated_on']

    def get_is_bookmark(self,obj):
        try:
            bookmarkobj=MagazineBookmark.objects.filter(magazines=obj.id).last()
            if bookmarkobj:
                statusbookmark=MagazineInfo.objects.filter(id=obj.id).update(is_bookmark=True)
                if statusbookmark:
                    return True
            else:
                return False
        except MagazineBookmark.DoesNotExist:
            return False
            

        # bookmarkobj=MagazineBookmark.objects.filter(magazines=obj.id).last()
        # if obj.id and bookmarkobj:
        #     statusbookmark=MagazineInfo.objects.filter(id=obj.id).update(is_bookmark=True)
        #     if statusbookmark==1:
        #         return True
        #     return False 
        # else:
        #     return False

    def get_is_favorite(self,obj):
        favoritreobj=MagazineFavorite.objects.filter(magazines=obj.id).last()
        if obj.id and favoritreobj:
            statusfavoritre=MagazineInfo.objects.filter(id=obj.id).update(is_favorite=True)
            if statusfavoritre==1:
                return True
            return False 
        else:
            return False


    def get_frequency(self,obj):
        try:
            if obj.frequency=="W":
                return "Weekly"
            elif obj.frequency=="Y":
                return "Yearly"
            elif obj.frequency=="Q":
                return "Quaterly"
            elif obj.frequency=="H":
                return "Half Yearly"
            elif obj.frequency=="M":
                return "Monthly"
            return None
        except MagazineInfo.DoesNotExist:
            return None

    def get_magazine_url(self,obj):
        try:
            if obj.id:
                magazineobj=MegazinePages.objects.filter(magazine=obj.id).last()
                if magazineobj:
                    serializer = MegazinePagesSerializer(magazineobj).data
                    return serializer
                return None
            return None
        except MagazineInfo.DoesNotExist:
            return None

    # def get_is_purchase(self,obj):
    #     try:
    #         purchaseobj=MagazinePurchaseInfo.objects.filter(magazineInfos=obj.id).last()
    #         print(purchaseobj.magazineInfos.id,'===')
    #         purchase_status=MagazineInfo.objects.filter(id=purchaseobj.magazineInfos.id).last()
    #         if purchase_status:
    #             purchase_condition=MagazineInfo.objects.filter(id=purchaseobj.magazineInfos.id).update(is_purchase=True)
    #             return purchase_condition
    #         else:
    #             purchase_condition=MagazineInfo.objects.filter(id=purchaseobj.magazineInfos.id).update(is_purchase=False)
    #             return purchase_condition
    #     except MagazineInfo.DoesNotExist:
    #         return None

            # print(purchaseobj.is_purchase,'===data')
            # return purchaseobj.is_purchase
        # if systemobj:
        # return None

    def get_system_category_name(self,obj):
        if obj.system_category:
            systemobj=SystemCategory.objects.filter(id=obj.system_category.id).last()
            return systemobj.category_name
        # if systemobj:
        return None

    def get_magazine_category_name(self,obj):
        if obj.system_category:
            magazineobj=MagazineCategory.objects.filter(id=obj.magazine_category.id).last()
            # if magazineobj:
            return magazineobj.category_name
        return None

    def get_authors(self, obj):
        auth = Author.objects.filter(id=obj.author_id).all()
        if auth:
            return AuthorSerializer(auth,many=True).data
        return None

    def get_pages(self, obj):
        pageobj = MagazineBookmark.objects.filter(magazines=obj.id).values()
        if pageobj:
            return MagazinebookmarkSerializer(pageobj,many=True).data
        return None

# magazine bookmark
class MagazineBookmarkSerializer(serializers.ModelSerializer):
    class Meta:
        model = MagazineBookmark
        # fields = '__all__'
        fields = ['id','page_number','magazines','users','create_on','updated_on']

# bookmark list serializer
class BookmarkListSerializer(serializers.ModelSerializer):
    user_id = serializers.SerializerMethodField()
    magazine_id = serializers.SerializerMethodField()
    class Meta:
        model = MagazineBookmark
        # fields = '__all__'
        fields = ['id','page_number','magazine_id','user_id','create_on','updated_on']

    def get_magazine_id(self,obj):
        if obj.magazines:
            return obj.magazines.id
        return None

    def get_user_id(self,obj):
        if obj.users:
            return obj.users.id
        return None

# magazine Favorite
class MagazineFavoriteSerializer(serializers.ModelSerializer):
    class Meta:
        model = MagazineFavorite
        # fields = '__all__'
        fields = ['id','page_number','magazines','users','create_on','updated_on']


################  # Magazine Liberary ####
class MagazineInfosSerializer(serializers.ModelSerializer):
    class Meta:
        model = MagazineInfo
        fields = '__all__'
class MagazineInfosCoverPicSerializer(serializers.ModelSerializer):
    class Meta:
        model = MagazineInfo
        fields = ['cover_pic',]
class MagazinePurchaseInfoSerializer(serializers.ModelSerializer):         # Magazine Liberary
    name = serializers.SerializerMethodField()
    authors = serializers.SerializerMethodField()
    cover_pic = serializers.SerializerMethodField()
    magazine_id = serializers.SerializerMethodField()
    ratting = serializers.SerializerMethodField()
    # authors = serializers.SerializerMethodField()
    class Meta:
        model = MagazinePurchaseInfo
        # fields = '__all__'
        fields = ['id','name','magazine_id','rent_date','ratting','buy_date','is_buyed','is_rented','rent_expiry_date','authors','cover_pic','create_on','updated_on']


    def get_ratting(self,obj):
        if obj.magazineInfos:
            return obj.magazineInfos.ratting
        return None

    def get_magazine_id(self,obj):
        if obj.magazineInfos:
            return obj.magazineInfos.id
        return None

    def get_name(self,obj):
        try:
            if obj.magazineInfos:     
                magazineobj=MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
                if magazineobj and magazineobj.name:
                    return magazineobj.name
                return None 
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None
    def get_cover_pic(self,obj):
        try:
            if obj.magazineInfos:
                magazineobj=MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
                serializer = MagazineInfosCoverPicSerializer(magazineobj, many=False)
                return serializer.data
            return None
        except MagazineInfo.DoesNotExist:
            return None

    # def get_authors(self, obj):
    #     if obj.magazineInfos and obj.magazineInfos.author_id:
    #         auth = Author.objects.filter(id=obj.magazineInfos.author_id).all()
    #         if auth:
    #             return AuthorSerializer(auth,many=True).data
    #     return None

    def get_authors(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.author_id).values_list('id',flat=True)
        maputhorobj = MagMapAuthor.objects.filter(magazine__in=magazineobj)
        authordata = PTestmagazineSerializer(maputhorobj,many=True)
        if authordata:
            return authordata.data
        return None 


# purchase magazine
class PurchaseInfoSerializer(serializers.ModelSerializer):         # Magazine Liberary
    class Meta:
        model = MagazinePurchaseInfo
        # fields = '__all__'
        fields = ['id','purchases_type','magazineInfos','users','rent_date','buy_date','is_buyed','is_rented','rent_expiry_date','create_on','updated_on']



# Magazine Search count ####
class SearchMagazineinfoSerializer(serializers.ModelSerializer):
    class Meta:
        model = SearchMagazineinfo
        fields = '__all__'
        # fields = ['id','rent_date','buy_date','is_buyed','is_rented','rent_expiry_date','create_on','updated_on']


class SearchMagazineDetailSerializer(serializers.ModelSerializer):
    system_category_name = serializers.SerializerMethodField()
    magazine_category_name = serializers.SerializerMethodField()
    authors = serializers.SerializerMethodField()
    pages = serializers.SerializerMethodField()
    frequency = serializers.SerializerMethodField()
    is_bookmark = serializers.SerializerMethodField()
    is_favorite = serializers.SerializerMethodField()
    class Meta:
        model = MagazineInfo
        # fields = '__all__'
        fields = ['id','magazine_url','is_aproved','is_active','is_purchase','cover_pic','name','ratting','rent_price','buy_price','description','background_first_color','background_second_color','reads','authors','published_date','frequency','system_category_name','magazine_category_name','is_bookmark','is_favorite','pages','users','create_on','updated_on']

    def get_is_bookmark(self,obj):
        bookmarkobj=MagazineBookmark.objects.filter(magazines=obj.id).last()
        if obj.id and bookmarkobj:
            statusbookmark=MagazineInfo.objects.filter(id=obj.id).update(is_bookmark=True)
            if statusbookmark==1:
                return True
            return False 
        else:
            return False

    def get_is_favorite(self,obj):
        favoritreobj=MagazineFavorite.objects.filter(magazines=obj.id).last()
        if obj.id and favoritreobj:
            statusfavoritre=MagazineInfo.objects.filter(id=obj.id).update(is_favorite=True)
            if statusfavoritre==1:
                return True
            return False 
        else:
            return False

    def get_frequency(self,obj):
        try:
            if obj.frequency=="W":
                return "Weekly"
            elif obj.frequency=="Y":
                return "Yearly"
            elif obj.frequency=="Q":
                return "Quaterly"
            elif obj.frequency=="H":
                return "Half Yearly"
            elif obj.frequency=="M":
                return "Monthly"
            return None
        except MagazineInfo.DoesNotExist:
            return None

    def get_system_category_name(self,obj):
        if obj.system_category:
            systemobj=SystemCategory.objects.filter(id=obj.system_category.id).last()
            return systemobj.category_name
        return None


    # Search All List.
    # def get_search_list(self,obj):
    #     searchobj=SearchMagazineinfo.objects.all()
    #     if searchobj:
    #         return SearchMagazineinfoSerializer(searchobj,many=True).data
    #     return None

    def get_magazine_category_name(self,obj):
        if obj.magazine_category:
            magazineobj=MagazineCategory.objects.filter(id=obj.magazine_category.id).last()
            # if magazineobj:
            return magazineobj.category_name
        return None

    # def get_authors(self, obj):
    #     auth = Author.objects.filter(id=obj.author_id).all()
    #     if auth:
    #         return AuthorSerializer(auth,many=True).data
    #     return None

    def get_authors(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.id).values_list('id',flat=True)
        maputhorobj = MagMapAuthor.objects.filter(magazine__in=magazineobj)
        authordata = PTestmagazineSerializer(maputhorobj,many=True)
        if authordata:
            return authordata.data
        return None

    def get_pages(self, obj):
        pageobj = MagazineBookmark.objects.filter(magazines=obj.id).values()
        if pageobj:
            return MagazinebookmarkSerializer(pageobj,many=True).data
        return None

class MagMapAuthorSerializer(serializers.ModelSerializer):
    system_category_name = serializers.SerializerMethodField()
    magazine_category_name = serializers.SerializerMethodField()
    authors = serializers.SerializerMethodField()
    pages = serializers.SerializerMethodField()
    frequency = serializers.SerializerMethodField()
    is_bookmark = serializers.SerializerMethodField()
    is_favorite = serializers.SerializerMethodField()
    magazine_url = serializers.SerializerMethodField()

    class Meta:
        model = MagMapAuthor
        # fields = '__all__'
        fields = ['id','magazine_url','is_purchase','cover_pic','name','ratting','rent_price','buy_price','description','background_first_color','background_second_color','reads','authors','published_date','frequency','system_category_name','magazine_category_name','is_bookmark','is_favorite','pages','users','create_on','updated_on']

    def get_magazine_url(self,obj):
        try:
            if obj.id:
                magazineobj=MegazinePages.objects.filter(magazine=obj.magazine.id).last()
                if magazineobj:
                    serializer = MegazinePagesSerializer(magazineobj).data
                    return serializer
                return None
            return None
        except MagazineInfo.DoesNotExist:
            return None

    def get_is_bookmark(self,obj):
        bookmarkobj=MagazineBookmark.objects.filter(magazines=obj.magazine.id).last()
        if obj.id and bookmarkobj:
            statusbookmark=MagazineInfo.objects.filter(id=obj.magazine.id).update(is_bookmark=True)
            if statusbookmark==1:
                return True
            return False 
        else:
            return False

    def get_is_favorite(self,obj):
        favoritreobj=MagazineFavorite.objects.filter(magazines=obj.magazine.id).last()
        if obj.id and favoritreobj:
            statusfavoritre=MagazineInfo.objects.filter(id=obj.magazine.id).update(is_favorite=True)
            if statusfavoritre==1:
                return True
            return False 
        else:
            return False

    def get_frequency(self,obj):
        try:
            if obj.magazine.frequency=="W":
                return "Weekly"
            elif obj.magazine.frequency=="Y":
                return "Yearly"
            elif obj.magazine.frequency=="Q":
                return "Quaterly"
            elif obj.magazine.frequency=="H":
                return "Half Yearly"
            elif obj.magazine.frequency=="M":
                return "Monthly"
            return None
        except MagMapAuthor.DoesNotExist:
            return None

    def get_system_category_name(self,obj):
        if obj.system_category:
            systemobj=SystemCategory.objects.filter(id=obj.magazine.system_category.id).last()
            return systemobj.category_name
        return None

    def get_magazine_category_name(self,obj):
        if obj.magazine_category:
            magazineobj=MagazineCategory.objects.filter(id=obj.magazine.magazine_category.id).last()
            # if magazineobj:
            return magazineobj.category_name
        return None

    def get_authors(self, obj):
        auth = Author.objects.filter(id=obj.author.author_id).all()
        if auth:
            return AuthorSerializer(auth,many=True).data
        return None

    def get_pages(self, obj):
        pageobj = MagazineBookmark.objects.filter(magazines=obj.magazine.id).values()
        if pageobj:
            return MagazinebookmarkSerializer(pageobj,many=True).data
        return None

class orderSerializer(serializers.ModelSerializer):
    name = serializers.SerializerMethodField()
    authors = serializers.SerializerMethodField()
    cover_pic = serializers.SerializerMethodField()
   
    # magazine_category_name = serializers.SerializerMethodField()
    # authors = serializers.SerializerMethodField()
    class Meta:
        model = MagazinePurchaseInfo
        # fields = '__all__'
        fields = ['id','purchases_type','name','cover_pic','rent_date','buy_date','is_buyed','is_rented','rent_expiry_date','authors','create_on','updated_on']

    def get_name(self,obj):
        try:
            if obj.magazineInfos:     
                magazineobj=MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
                if magazineobj and magazineobj.name:
                    return magazineobj.name
                return None 
        except MagazineInfo.DoesNotExist:
            return None

    def get_cover_pic(self,obj):
        try:
            if obj.magazineInfos:
                magazineobj=MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
                serializer = MagazineInfosCoverPicSerializer(magazineobj, many=False)
                return serializer.data
            return None
        except MagazineInfo.DoesNotExist:
            return None

    def get_authors(self, obj):
        if obj.magazineInfos and obj.magazineInfos.author_id:
            auth = Author.objects.filter(id=obj.magazineInfos.author_id).all()
            if auth:
                return AuthorSerializer(auth,many=True).data
            return None
        return None


#Today magazine libarery
class magazineliberarySerializer(serializers.ModelSerializer):
    system_category_name = serializers.SerializerMethodField()
    magazine_category_name = serializers.SerializerMethodField()
    authors = serializers.SerializerMethodField()
    pages = serializers.SerializerMethodField()
    magazine_url = serializers.SerializerMethodField()
    frequency = serializers.SerializerMethodField()
    cover_pic = serializers.SerializerMethodField()
    magazine_id = serializers.SerializerMethodField()
    # is_favorite = serializers.SerializerMethodField()
    # is_bookmark = serializers.SerializerMethodField()
    # is_purchase = serializers.SerializerMethodField()
    class Meta:
        model = MagazineInfo
        # fields = '__all__'
        fields = ['id','magazine_url','is_aproved','is_active','is_purchase','cover_pic','magazine_id','name','ratting','rent_price','buy_price','description','background_first_color','background_second_color','reads','authors','published_date','frequency','system_category_name','magazine_category_name','is_bookmark','is_favorite','pages','create_on','updated_on']

    def get_magazine_id(self,obj):
        if obj.id:
            return obj.id
        return None

    def get_cover_pic(self,obj):
        try:
            if obj:
                magazineobj=MagazineInfo.objects.filter(id=obj.id).last()
                serializer = MagazineInfosCoverPicSerializer(magazineobj, many=False)
                return serializer.data
            return None
        except MagazineInfo.DoesNotExist:
            return None

    # def get_cover_pic(self,obj):
    #     # try:
    #     if obj.magazineInfos:     
    #         magazineobj=MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
    #         if magazineobj and magazineobj.cover_pic:
    #             return magazineobj.cover_pic
    #         return None

    # def get_is_bookmark(self,obj):
    #     bookmarkobj=MagazineBookmark.objects.filter(magazines=obj.id).last()
    #     if obj.id and bookmarkobj:
    #         statusbookmark=MagazineInfo.objects.filter(id=obj.id).update(is_bookmark=True)
    #         if statusbookmark==1:
    #             return True
    #         return False 
    #     else:
    #         return False

    # def get_is_favorite(self,obj):
    #     favoritreobj=MagazineFavorite.objects.filter(magazines=obj.id).last()
    #     if obj.id and favoritreobj:
    #         statusfavoritre=MagazineInfo.objects.filter(id=obj.id).update(is_favorite=True)
    #         if statusfavoritre==1:
    #             return True
    #         return False 
    #     else:
    #         return False
    # def get_is_purchase(self,obj):
    #     Purchaseobj=MagazinePurchaseInfo.objects.filter(magazineInfos=obj.id).last()
    #     if obj.id and Purchaseobj:
    #         statusfavoritre=MagazineInfo.objects.filter(id=obj.id).update(is_purchase=True)
    #         if statusfavoritre==1:
    #             return True
    #         return False 
    #     else:
    #         return False

    def get_frequency(self,obj):
        try:
            if obj.frequency=="W":
                return "Weekly"
            elif obj.frequency=="Y":
                return "Yearly"
            elif obj.frequency=="Q":
                return "Quaterly"
            elif obj.frequency=="H":
                return "Half Yearly"
            elif obj.frequency=="M":
                return "Monthly"
            return None
        except MagazineInfo.DoesNotExist:
            return None

    def get_magazine_url(self,obj):
        try:
            if obj.id:
                magazineobj=MegazinePages.objects.filter(magazine=obj.id).last()
                if magazineobj:
                    serializer = MegazinePagesSerializer(magazineobj).data
                    return serializer
                return None
            return None
        except MagazineInfo.DoesNotExist:
            return None

    def get_system_category_name(self,obj):
        if obj.system_category:
            systemobj=SystemCategory.objects.filter(id=obj.system_category.id).last()
            return systemobj.category_name
        # if systemobj:
        return None

    def get_magazine_category_name(self,obj):
        if obj.system_category:
            magazineobj=MagazineCategory.objects.filter(id=obj.magazine_category.id).last()
            # if magazineobj:
            return magazineobj.category_name
        return None

    # def get_authors(self, obj):
    #     auth = Author.objects.filter(id=obj.author_id).all()
    #     if auth:
    #         return AuthorSerializer(auth,many=True).data
    #     return None

    def get_authors(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.id).values_list('id',flat=True)
        maputhorobj = MagMapAuthor.objects.filter(magazine__in=magazineobj)
        authordata = PTestmagazineSerializer(maputhorobj,many=True)
        if authordata:
            return authordata.data
        return None

    def get_pages(self, obj):
        user_id = self.context.get('user_id')
        pageobj = MagazineBookmark.objects.filter(magazines=obj.id,users=user_id).values()
        if pageobj:
            return MagazinebookmarkSerializer(pageobj,many=True).data
        return None


# Test user,magazine magazine detail
class TestmagazineSerializer(serializers.ModelSerializer):
    magazine_type = serializers.CharField()
    system_category_name = serializers.SerializerMethodField()
    magazine_category_name = serializers.SerializerMethodField()
    authors = serializers.SerializerMethodField()
    pages = serializers.SerializerMethodField()
    magazine_url = serializers.SerializerMethodField()
    frequency = serializers.SerializerMethodField()
    pdf_count = serializers.SerializerMethodField()
    currency = serializers.SerializerMethodField()
    is_subscription = serializers.SerializerMethodField()
    cover_price = serializers.SerializerMethodField()
    sku = serializers.SerializerMethodField()
    issues = serializers.SerializerMethodField()
    years_available = serializers.SerializerMethodField()
    umc = serializers.CharField()
    comment = serializers.SerializerMethodField()
    is_purchase = serializers.SerializerMethodField()
    cover_pic = serializers.SerializerMethodField()
    name = serializers.SerializerMethodField()
    ratting = serializers.SerializerMethodField()
    rent_price = serializers.SerializerMethodField()
    buy_price = serializers.SerializerMethodField()
    description = serializers.SerializerMethodField()
    background_first_color = serializers.SerializerMethodField()
    background_second_color = serializers.SerializerMethodField()
    reads = serializers.SerializerMethodField()
    published_date = serializers.SerializerMethodField()
    is_bookmark = serializers.SerializerMethodField()
    is_favorite =serializers.SerializerMethodField()
    is_read_status = serializers.SerializerMethodField()
    is_rented = serializers.SerializerMethodField()
    free_pages = serializers.SerializerMethodField()
    create_on = serializers.SerializerMethodField()
    updated_on = serializers.SerializerMethodField()

    class Meta:
        model = MagMapAuthor
        # fields = '__all__'
        # fields = ['id','magazine_url','magazine_type','cover_price','sku','issues','years_available','umc','subrate','remit','comment','currency','pdf_count','is_purchase','cover_pic','name','ratting','rent_price','buy_price','description','background_first_color','background_second_color','reads','authors','published_date','frequency','system_category_name','magazine_category_name','is_bookmark','is_favorite','is_read_status','is_rented','is_subscription','free_pages','pages','create_on','updated_on']
        fields = ['id','magazine_url','magazine_type','cover_price','sku','issues','years_available','umc','comment','currency','pdf_count','is_purchase','cover_pic','name','ratting','rent_price','buy_price','description','background_first_color','background_second_color','reads','authors','published_date','frequency','system_category_name','magazine_category_name','is_bookmark','is_favorite','is_read_status','is_rented','is_subscription','free_pages','pages','create_on','updated_on']

    def get_is_subscription(self,obj):
        userid=self.context.get('user')
        userobj = MagazinePurchaseInfo.objects.filter(users_id=userid,is_subscription=True,subscription_user_status=True).last()
        if userobj:
            return True
        return False

    def get_currency(self,obj):
        return str('USD')

    def get_pdf_count(self,obj):
        try:
            magazineobj=MegazinePages.objects.filter(magazine=obj.magazine.id).last()
            if magazineobj:
                if magazineobj.page_number:
                    return magazineobj.page_number
                return None
            return None
        except MagMapAuthor.DoesNotExist:
            return None

    def get_magazine_type(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.magazine_type
            return None
        except MagMapAuthor.DoesNotExist:
            return None


    def get_cover_price(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.cover_price
            return None
        except MagMapAuthor.DoesNotExist:
            return None


    def get_sku(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.sku
            return None
        except MagMapAuthor.DoesNotExist:
            return None


    def get_issues(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.issues
            return None
        except MagMapAuthor.DoesNotExist:
            return None


    def get_years_available(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.years_available
            return None
        except MagMapAuthor.DoesNotExist:
            return None


    def get_umc(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.umc
            return None
        except MagMapAuthor.DoesNotExist:
            return None


    def get_comment(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.comment
            return None
        except MagMapAuthor.DoesNotExist:
            return None

    def get_is_purchase(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.is_purchase
            return None
        except MagMapAuthor.DoesNotExist:
            return None
    def get_cover_pic(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.cover_pic
            return None
        except MagMapAuthor.DoesNotExist:
            return None
    def get_name(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.name
            return None
        except MagMapAuthor.DoesNotExist:
            return None
    def get_ratting(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.ratting
            return None
        except MagMapAuthor.DoesNotExist:
            return None
    def get_rent_price(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.rent_price
            return None
        except MagMapAuthor.DoesNotExist:
            return None
    def get_buy_price(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.buy_price
            return None
        except MagMapAuthor.DoesNotExist:
            return None
    def get_description(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.description
            return None
        except MagMapAuthor.DoesNotExist:
            return None
    def get_background_first_color(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.background_first_color
            return None
        except MagMapAuthor.DoesNotExist:
            return None
    def get_background_second_color(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.background_second_color
            return None
        except MagMapAuthor.DoesNotExist:
            return None
    def get_reads(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.reads
            return None
        except MagMapAuthor.DoesNotExist:
            return None
    def get_published_date(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.published_date
            return None
        except MagMapAuthor.DoesNotExist:
            return None
    def get_is_bookmark(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.is_bookmark
            return None
        except MagMapAuthor.DoesNotExist:
            return None
    def get_is_favorite(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.is_favorite
            return None
        except MagMapAuthor.DoesNotExist:
            return None
    def get_is_read_status(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.is_read_status
            return None
        except MagMapAuthor.DoesNotExist:
            return None
    def get_is_rented(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.is_rented
            return None
        except MagMapAuthor.DoesNotExist:
            return None
    def get_free_pages(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.free_pages
            return None
        except MagMapAuthor.DoesNotExist:
            return None
    def get_create_on(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.create_on
            return None
        except MagMapAuthor.DoesNotExist:
            return None
    def get_updated_on(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.updated_on
            return None
        except MagMapAuthor.DoesNotExist:
            return None

    def get_frequency(self,obj):
        try:
            if obj.magazine.frequency=="W":
                return "Weekly"
            elif obj.magazine.frequency=="Y":
                return "Yearly"
            elif obj.magazine.frequency=="Q":
                return "Quaterly"
            elif obj.magazine.frequency=="H":
                return "Half Yearly"
            elif obj.magazine.frequency=="M":
                return "Monthly"
            return None
        except MagazineInfo.DoesNotExist:
            return None

    def get_magazine_url(self,obj):
        try:
            if obj.id:
                print(obj.magazine.id,'=======id====')
                magazineobj=MegazinePages.objects.filter(magazine=obj.magazine.id).last()
                if magazineobj:
                    serializer = MegazinePagesSerializer(magazineobj).data
                    return serializer
                return None
            return None
        except MagazineInfo.DoesNotExist:
            return None


    def get_system_category_name(self,obj):
        if obj.system_category:
            systemobj=SystemCategory.objects.filter(id=obj.magazine.system_category.id).last()
            return systemobj.category_name
        # if systemobj:
        return None

    def get_magazine_category_name(self,obj):
        if obj.system_category:
            magazineobj=MagazineCategory.objects.filter(id=obj.magazine.magazine_category.id).last()
            # if magazineobj:
            return magazineobj.category_name
        return None

    def get_authors(self, obj):
        auth = Author.objects.filter(id=obj.author.author_id).all()
        if auth:
            return AuthorSerializer(auth,many=True).data
        return None


    def get_pages(self, obj):
        userid=self.context.get('user')
        pageobj = MagazineBookmark.objects.filter(magazines=obj.magazine.id,users=userid).values_list('page_number',flat=True)
        if pageobj:
            return pageobj
            # return MagazinebookmarkSerializer(pageobj,many=True).data
        return None

# Test user,magazine magazine detail
class PTestmagazineSerializer(serializers.ModelSerializer):
    id = serializers.CharField()
    author_name = serializers.SerializerMethodField()

    class Meta:
        model = MagMapAuthor
        # fields = '__all__'
        fields = ['id','author_name']

    def get_id(self,obj):
        return obj.author
    
    def get_author_name(self,obj):
        if obj.author and obj.author.author_name:
            return obj.author.author_name
        return None
        

# user,magazine magazine detail
class magazineSerializer(serializers.ModelSerializer):
    read_count = serializers.SerializerMethodField()
    # magazine_id = serializers.CharField()
    system_category_name = serializers.SerializerMethodField()
    magazine_category_name = serializers.SerializerMethodField()
    authors = serializers.SerializerMethodField()
    pages = serializers.SerializerMethodField()
    magazine_url = serializers.SerializerMethodField()
    frequency = serializers.SerializerMethodField()
    pdf_count = serializers.SerializerMethodField()
    currency = serializers.SerializerMethodField()
    is_subscription = serializers.SerializerMethodField()
    # is_rented = serializers.SerializerMethodField()
    # is_bookmark = serializers.SerializerMethodField()
    # is_purchase = serializers.SerializerMethodField()
    # is_read_status = serializers.SerializerMethodField()
    class Meta:
        model = MagazineInfo
        # fields = '__all__'
        fields = ['id','magazine_url','is_aproved','is_active','magazine_type','cover_price','sku','issues','years_available','umc','subrate','remit','comment','currency','pdf_count','is_purchase','cover_pic','name','ratting','rent_price','buy_price','description','background_first_color','background_second_color','reads','authors','published_date','frequency','system_category_name','magazine_category_name','is_bookmark','is_favorite','is_read_status','is_rented','is_subscription','free_pages','pages','create_on','updated_on', "read_count"]
        # fields = ['id','magazine_url','magazine_type','cover_price','sku','issues','years_available','umc','comment','currency','pdf_count','is_purchase','cover_pic','name','ratting','rent_price','buy_price','description','background_first_color','background_second_color','reads','authors','published_date','frequency','system_category_name','magazine_category_name','is_bookmark','is_favorite','is_read_status','is_rented','is_subscription','is_hard_copy','free_pages','pages','create_on','updated_on']

    # def get_is_rented(self,obj):
    #     try:
    #         userid = self.context.get('user')
    #         current_date = datetime.datetime.now() 
    #         purchase = MagazinePurchaseInfo.objects.filter(magazineInfos=obj.id,users=userid,is_rented=True).first()
    #         duration = purchase.rent_date <=current_date <= purchase.rent_expiry_date
    #         if purchase and duration:
    #             return True
    #         # purchase = MagazinePurchaseInfo.objects.filter(magazineInfos=obj.id,users=userid,is_rented=True).update(subscription_user_status=False)
    #         return False
    #     except MagazinePurchaseInfo.DoesNotExist:
    #         False

    def get_is_subscription(self,obj):
        userid=self.context.get('user')
        userobj = MagazinePurchaseInfo.objects.filter(users_id=userid,is_subscription=True,subscription_user_status=True).last()
        if userobj:
            return True
        return False

    # def get_is_hard_copy(self,obj):
    #     userid=self.context.get('user')
    #     userobj = MagazinePurchaseInfo.objects.filter(users_id=userid,is_hard_copy=True).last()
    #     if userobj:
    #         return True
    #     return False

    def get_currency(self,obj):
        return str('USD')

    def get_pdf_count(self,obj):
        # self.context.get('request')
        # print(self.context.get('user'),"==============================//")
        try:
            magazineobj=MegazinePages.objects.filter(magazine=obj.id).last()
            if magazineobj:
                if magazineobj.page_number:
                    return magazineobj.page_number
                return None
            return None
        except MagazineInfo.DoesNotExist:
            return None

    def get_frequency(self,obj):
        try:
            if obj.frequency=="W":
                return "Weekly"
            elif obj.frequency=="Y":
                return "Yearly"
            elif obj.frequency=="Q":
                return "Quaterly"
            elif obj.frequency=="H":
                return "Half Yearly"
            elif obj.frequency=="M":
                return "Monthly"
            return None
        except MagazineInfo.DoesNotExist:
            return None

    def get_magazine_url(self,obj):
        try:
            if obj.id:
                magazineobj=MegazinePages.objects.filter(magazine=obj.id).last()
                if magazineobj:
                    serializer = MegazinePagesSerializer(magazineobj).data
                    return serializer
                return None
            return None
        except MagazineInfo.DoesNotExist:
            return None


    def get_system_category_name(self,obj):
        if obj.system_category:
            systemobj=SystemCategory.objects.filter(id=obj.system_category.id).last()
            return systemobj.category_name
        # if systemobj:
        return None

    def get_magazine_category_name(self,obj):
        if obj.system_category:
            magazineobj=MagazineCategory.objects.filter(id=obj.magazine_category.id).last()
            # if magazineobj:
            return magazineobj.category_name
        return None

    # def get_authors(self, obj):
    #     auth = Author.objects.filter(id=obj.author_id).all()
    #     if auth:
    #         return AuthorSerializer(auth,many=True).data
    #     return None

    # def get_authors(self,obj):
    #     magazineobj = MagazineInfo.objects.filter(id=obj.id).values_list('id',flat=True)
    #     maputhorobj = MagMapAuthor.objects.filter(magazine__in=magazineobj).values('author_id','author_id__author_name')
    #     if maputhorobj:
    #         return maputhorobj
    #     return None

    def get_authors(self,obj):
        
        magazineobj = MagazineInfo.objects.filter(id=obj.id,is_aproved=True,is_active=True).values_list('id',flat=True)
        maputhorobj = MagMapAuthor.objects.filter(magazine__in=magazineobj)
        authordata = PTestmagazineSerializer(maputhorobj,many=True)
        if authordata:
            return authordata.data
        return None

    def get_pages(self, obj):
        userid=self.context.get('user')
        pageobj = MagazineBookmark.objects.filter(magazines=obj.id,users=userid).values_list('page_number',flat=True)
        if pageobj:
            return pageobj
            # return MagazinebookmarkSerializer(pageobj,many=True).data
        return None

    def get_read_count(self, obj):
        read_count = MagazineReadStatus.objects.filter(magazine = obj.id)
        return read_count.count()

# magazine magazine detail
class AlldataSerializer(serializers.ModelSerializer):
    system_category_name = serializers.SerializerMethodField()
    magazine_category_name = serializers.SerializerMethodField()
    authors = serializers.SerializerMethodField()
    pages = serializers.SerializerMethodField()
    magazine_url = serializers.SerializerMethodField()
    frequency = serializers.SerializerMethodField()
    # cover_pic = serializers.SerializerMethodField()
    is_favorite = serializers.SerializerMethodField()
    is_bookmark = serializers.SerializerMethodField()
    is_purchase = serializers.SerializerMethodField()
    is_read_status = serializers.SerializerMethodField()
    is_rented = serializers.SerializerMethodField()
    is_subscription = serializers.SerializerMethodField()
    pdf_count = serializers.SerializerMethodField()
    currency = serializers.SerializerMethodField()
    read_count = serializers.SerializerMethodField()
    class Meta:
        model = MagazineInfo
        # fields = '__all__'
        fields = ['id','magazine_url','is_aproved','is_active','magazine_type','cover_price','sku','issues','years_available','umc','subrate','remit','comment','currency','pdf_count','cover_pic','name','ratting','rent_price','buy_price','description','background_first_color','background_second_color','reads','authors','published_date','frequency','system_category_name','magazine_category_name','pages','is_bookmark','is_favorite','is_purchase','is_read_status','is_rented','is_subscription','free_pages','create_on','updated_on','read_count']
        # fields = ['id','magazine_url','magazine_type','cover_price','sku','issues','years_available','umc','comment','currency','pdf_count','cover_pic','name','ratting','rent_price','buy_price','description','background_first_color','background_second_color','reads','authors','published_date','frequency','system_category_name','magazine_category_name','pages','is_bookmark','is_favorite','is_purchase','is_read_status','is_rented','is_subscription','is_hard_copy','free_pages','create_on','updated_on']

    def get_currency(self,obj):
        return str('USD')

    def get_pdf_count(self,obj):
        try:
            magazineobj=MegazinePages.objects.filter(magazine=obj.id).last()
            if magazineobj:
                if magazineobj.page_number:
                    return magazineobj.page_number
                return None
            return None
        except MagazineInfo.DoesNotExist:
            return None

    # def get_pdf_page_number(self,obj):
    #     try:
    #         magazineobj=MegazinePages.objects.filter(magazine=obj.id).last()
    #         if magazineobj:
    #             if magazineobj.pages:
    #                 file_extension = pathlib.Path('https://mfhamagaziin-bucket.s3.amazonaws.com/Images/Pages/Braiding_Sweetgrass.pdf?AWSAccessKeyId=AKIAWL5YEGCMBRJ26I3P&Signature=kq7tqOZSYskdFMzxxhfFvSbwc9k%3D&Expires=1657796601').suffix
    #                 if file_extension == '.pdf':
    #                     print('match')
    #                     file = open('https://mfhamagaziin-bucket.s3.amazonaws.com/Images/Pages/Braiding_Sweetgrass.pdf?AWSAccessKeyId=AKIAWL5YEGCMBRJ26I3P&Signature=kq7tqOZSYskdFMzxxhfFvSbwc9k%3D&Expires=1657796601', 'rb')
    #                     print(file,'00000000000000000000')
    #                     readpdf = PyPDF2.PdfFileReader(file)
    #                     totalpages = readpdf.numPages
    #                     print(totalpages,'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
    #     except MagazineInfo.DoesNotExist:
    #         return None

    def get_is_bookmark(self,obj):
        return False

    def get_is_favorite(self,obj):
        return False

    def get_is_purchase(self,obj):
        return False

    def get_is_read_status(self,obj):
        return False

    def get_is_rented(self,obj):
        return False

    def get_is_subscription(self,obj):
        return False
    
    # def get_is_hard_copy(self,obj):
    #     return False

    def get_frequency(self,obj):
        try:
            if obj.frequency=="W":
                return "Weekly"
            elif obj.frequency=="Y":
                return "Yearly"
            elif obj.frequency=="Q":
                return "Quaterly"
            elif obj.frequency=="H":
                return "Half Yearly"
            elif obj.frequency=="M":
                return "Monthly"
            return None
        except MagazineInfo.DoesNotExist:
            return None

    def get_magazine_url(self,obj):
        try:
            if obj.id:
                magazineobj=MegazinePages.objects.filter(magazine=obj.id).last()
                if magazineobj:
                    serializer = MegazinePagesSerializer(magazineobj).data
                    return serializer
                return None
            return None
        except MagazineInfo.DoesNotExist:
            return None


    def get_system_category_name(self,obj):
        if obj.system_category:
            systemobj=SystemCategory.objects.filter(id=obj.system_category.id).last()
            return systemobj.category_name
        # if systemobj:
        return None

    def get_magazine_category_name(self,obj):
        if obj.system_category:
            magazineobj=MagazineCategory.objects.filter(id=obj.magazine_category.id).last()
            # if magazineobj:
            return magazineobj.category_name
        return None

    # def get_authors(self, obj):
    #     auth = Author.objects.filter(id=obj.author_id).all()
    #     if auth:
    #         return AuthorSerializer(auth,many=True).data
    #     return None

    # def get_authors(self,obj):
    #     magazineobj = MagazineInfo.objects.filter(id=obj.id).values_list('id',flat=True)
    #     maputhorobj = MagMapAuthor.objects.filter(magazine__in=magazineobj).values('author_id','author_id__author_name')
    #     if maputhorobj:
    #         return maputhorobj
    #     return None


    def get_authors(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.id).values_list('id',flat=True)
        maputhorobj = MagMapAuthor.objects.filter(magazine__in=magazineobj)
        authordata = PTestmagazineSerializer(maputhorobj,many=True)
        if authordata:
            return authordata.data
        return None

    def get_pages(self, obj):
        return None
        # pageobj = MagazineBookmark.objects.filter(magazines=obj.id).values_list('page_number',flat=True)
        # if pageobj:
        #     return pageobj
        #     # return MagazinebookmarkSerializer(pageobj,many=True).data
        # return None
    def get_read_count(self, obj):
        read_count = MagazineReadStatus.objects.filter(magazine = obj.id)
        return read_count.count()

########################################## Magazine Purchase Info serializer
class CreatepurchageSerializer(serializers.ModelSerializer):
    class Meta:
        model = MagazinePurchaseInfo
        # fields = '__all__'
        # fields = ['id','purchases_type','offer_code','offer_max_amount','offer_discount_amount','offer_discount','magazineOffer','purchases_order_id','transaction_id','currency','subscription_price','buy_price','offer_price','is_offered','rent_price','rent_date','buy_date','is_buyed','is_rented','is_subscription','rent_expiry_date','magazineInfos','users','subscription','months','create_on','updated_on']
        fields = ['id','purchases_type','delivery_location','offer_code','offer_max_amount','offer_discount_amount','offer_discount','magazineOffer','purchases_order_id','transaction_id','currency','subscription_price','buy_price','offer_price','is_offered','rent_price','hard_copy_price','rent_date','buy_date','is_buyed','is_rented','is_subscription','is_hard_copy','rent_expiry_date','magazineInfos','users','subscription','months','create_on','updated_on']
class ShowPurchaseSerializer(serializers.ModelSerializer):
    magazine_id = serializers.SerializerMethodField()
    user_id = serializers.SerializerMethodField()
    price = serializers.SerializerMethodField()
    date = serializers.SerializerMethodField()
    expiry_date = serializers.SerializerMethodField()
    user_name = serializers.SerializerMethodField()
    magazine_name = serializers.SerializerMethodField()
    currency = serializers.SerializerMethodField()
    class Meta:

        model = MagazinePurchaseInfo
        # fields = '__all__'
        # fields = ['id','purchases_type','purchases_order_id','transaction_id','offer_code','offer_max_amount','offer_discount_amount','offer_discount','currency','date','price','offer_price','is_offered','is_buyed','is_rented','is_subscription','expiry_date','magazine_id','magazine_name','user_id','user_name','months','create_on','updated_on']
        fields = ['id','purchases_type','delivery_location','purchases_order_id','transaction_id','offer_code','offer_max_amount','offer_discount_amount','offer_discount','currency','date','price','offer_price','is_offered','is_buyed','is_rented','is_subscription','is_hard_copy','expiry_date','magazine_id','magazine_name','user_id','user_name','months','create_on','updated_on']
    def get_currency(self,obj):
        return str('USD')

    def get_magazine_id(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
        if magazineobj:
            return magazineobj.id
        return None

    def get_magazine_name(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
        if magazineobj:
            return magazineobj.name
        return None

    def get_expiry_date(self,obj):
        if obj:
            return obj.rent_expiry_date
        return None

    def get_user_id(self,obj):
        userobj = User.objects.filter(id=obj.users.id).last()
        if userobj:
            return userobj.id
        return None

    def get_user_name(self,obj):
        userobj = User.objects.filter(id=obj.users.id).last()
        if userobj:
            return userobj.first_name
        return None

    def get_price(self,obj):
        rentobj=obj.rent_price
        priceobj=obj.buy_price
        # Subscriptionobj = obj.subscription.price
        # subs = MagazinePurchaseInfo.objects.filter(subscription=obj.subscription.id).last()
        if rentobj:
            return rentobj
        elif priceobj:
            return priceobj
        elif obj.subscription_price:
            return obj.subscription_price
        elif obj.hard_copy_price:
            return obj.hard_copy_price
        return None

    def get_date(self,obj):
        rentobj=obj.rent_date
        priceobj=obj.buy_date
        if rentobj:
            return rentobj
        elif priceobj:
            return priceobj

########################################## Subscriptions Magazine Purchase Info serializer
class SCreatepurchageSerializer(serializers.ModelSerializer):
    class Meta:
        model = MagazinePurchaseInfo
        # fields = '__all__'
        # fields = ['id','purchases_type','offer_code','offer_max_amount','offer_discount_amount','offer_discount','magazineOffer','purchases_order_id','transaction_id','currency','subscription_price','buy_price','offer_price','is_offered','rent_price','rent_date','buy_date','is_buyed','is_rented','is_subscription','rent_expiry_date','magazineInfos','users','subscription','months','create_on','updated_on']
        fields = ['id','purchases_type','delivery_location','offer_code','offer_max_amount','offer_discount_amount','offer_discount','magazineOffer','purchases_order_id','transaction_id','currency','subscription_price','buy_price','offer_price','is_offered','rent_price','hard_copy_price','rent_date','buy_date','is_buyed','is_rented','is_subscription','is_hard_copy','rent_expiry_date','magazineInfos','users','subscription','months','create_on','updated_on']
class SShowPurchaseSerializer(serializers.ModelSerializer):
    magazine_id = serializers.SerializerMethodField()
    user_id = serializers.SerializerMethodField()
    price = serializers.SerializerMethodField()
    date = serializers.SerializerMethodField()
    expiry_date = serializers.SerializerMethodField()
    user_name = serializers.SerializerMethodField()
    magazine_name = serializers.SerializerMethodField()
    currency = serializers.SerializerMethodField()
    class Meta:

        model = MagazinePurchaseInfo
        # fields = '__all__'
        # fields = ['id','purchases_type','purchases_order_id','transaction_id','offer_code','offer_max_amount','offer_discount_amount','offer_discount','currency','date','price','offer_price','is_offered','is_buyed','is_rented','is_subscription','expiry_date','magazine_id','magazine_name','user_id','user_name','months','create_on','updated_on']
        fields = ['id','purchases_type','delivery_location','purchases_order_id','transaction_id','offer_code','offer_max_amount','offer_discount_amount','offer_discount','currency','date','price','offer_price','is_offered','is_buyed','is_rented','is_subscription','is_hard_copy','expiry_date','magazine_id','magazine_name','user_id','user_name','months','create_on','updated_on']
    def get_currency(self,obj):
        return str('USD')

    def get_magazine_id(self,obj):
        # magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
        # if magazineobj:
        #     return magazineobj.id
        return None

    def get_magazine_name(self,obj):
        # magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
        # if magazineobj:
        #     return magazineobj.name
        return None

    def get_expiry_date(self,obj):
        if obj:
            return obj.rent_expiry_date
        return None

    def get_user_id(self,obj):
        userobj = User.objects.filter(id=obj.users.id).last()
        if userobj:
            return userobj.id
        return None

    def get_user_name(self,obj):
        userobj = User.objects.filter(id=obj.users.id).last()
        if userobj:
            return userobj.first_name
        return None

    def get_price(self,obj):
        # rentobj=obj.rent_price
        # priceobj=obj.buy_price
        # Subscriptionobj = obj.subscription.price
        # subs = MagazinePurchaseInfo.objects.filter(subscription=obj.subscription.id).last()
        # if rentobj:
        #     return rentobj
        # elif priceobj:
        #     return priceobj
        # elif obj.subscription_price:
        #     return obj.subscription_price
        # elif obj.hard_copy_price:
        #     return obj.hard_copy_price
        return None

    def get_date(self,obj):
        rentobj=obj.rent_date
        priceobj=obj.buy_date
        if rentobj:
            return rentobj
        elif priceobj:
            return priceobj
        return None

class MagazinePurchaseInfodataSerializer(serializers.ModelSerializer):
    class Meta:
        model = MagazinePurchaseInfo
        # fields = '__all__'
        fields = ['id','purchases_type','rent_date','buy_date','is_buyed','is_rented','rent_expiry_date','magazineInfos','users','create_on','updated_on']

# magazine Offer list serializer

class MagazineOfferListSerializer(serializers.ModelSerializer):
    # user_id = serializers.SerializerMethodField()
    # subscription_type = serializers.SerializerMethodField()
    # days = serializers.SerializerMethodField()
    # months = serializers.SerializerMethodField()
    # price = serializers.SerializerMethodField()
    total_price = serializers.SerializerMethodField()
    class Meta:
        model = MagazineOfferinfo
        # fields = '__all__'
        fields = ['id','code','discount','months','description','created_on','updated_on']

class MagazineOfferListSerializer(serializers.ModelSerializer):
    user_id = serializers.SerializerMethodField()
    subscription_type = serializers.SerializerMethodField()
    days = serializers.SerializerMethodField()
    months = serializers.SerializerMethodField()
    price = serializers.SerializerMethodField()
    total_price = serializers.SerializerMethodField()
    class Meta:
        model = MagazineOfferinfo
        # fields = '__all__'
        fields = ['id','code','total_price','discount','months','subscription_type','days','price','start_date','end_date','user_id','description','created_on','updated_on']

    def get_total_price(self,obj):
        if obj:
            return obj.max_discount
        return None

    def get_price(self,obj):
        if obj.subscriptiontype:
            obj.subscriptiontype.price
            return obj.subscriptiontype.price
        return None

    def get_user_id(self,obj):
        if obj.users:
            return obj.users.id
        return None

    def get_subscription_type(self,obj):
        if obj.subscriptiontype:
            return obj.subscriptiontype.subscription_type
        return None

    def get_days(self,obj):
        if obj.subscriptiontype:
            return obj.subscriptiontype.days
        return None

    def get_months(self,obj):
        try:
            if obj.subscriptiontype:
                if obj.subscriptiontype.subscription_type == "golden":
                    return str('3 months')
                elif obj.subscriptiontype.subscription_type == "silver":
                    return str('2 months')
                elif obj.subscriptiontype.subscription_type == "premium":
                    return str('1 months')
                return None   
            return None
        except Subscription.DoesNotExist as e:
            return None

class MutipleMAGOfferListSerializer(serializers.ModelSerializer):
    # code = serializers.SerializerMethodField()
    # # user_id = serializers.SerializerMethodField()
    # offer_id = serializers.SerializerMethodField()
    # discount = serializers.SerializerMethodField()
    # max_discount = serializers.SerializerMethodField()
    # start_date = serializers.SerializerMethodField()
    # end_date = serializers.SerializerMethodField()
    # offer_status = serializers.SerializerMethodField()
    # description = serializers.SerializerMethodField()
    # created_on = serializers.SerializerMethodField()
    # updated_on = serializers.SerializerMethodField()
    class Meta:
        model = MagazineOfferinfo
        # fields = '__all__'
        # fields = ['id','users','code','price','discount','max_discount','start_date','end_date','offer_status','description','created_on','updated_on']
        fields = ['id','code','discount','max_discount','start_date','end_date','offer_status','description','created_on','updated_on']

    # def get_user_id(self,obj):
    #     if obj.user:
    #         return obj.user.id
    #     return None
    # def get_offer_id(self,obj):
    #     if obj.magazineoffer:
    #         return obj.magazineoffer.id
    #     return None
    # def get_code(self,obj):
    #     if obj.magazineoffer:
    #         return obj.magazineoffer.code
    #     return None
    # def get_discount(self,obj):
    #     if obj.magazineoffer:
    #         return obj.magazineoffer.discount
    #     return None
    # def get_max_discount(self,obj):
    #     if obj.magazineoffer:
    #         return obj.magazineoffer.max_discount
    #     return None
    # def get_start_date(self,obj):
    #     if obj.magazineoffer:
    #         return obj.magazineoffer.start_date
    #     return None
    # def get_end_date(self,obj):
    #     if obj.magazineoffer:
    #         return obj.magazineoffer.end_date
    #     return None
    # def get_offer_status(self,obj):
    #     if obj.magazineoffer:
    #         return obj.magazineoffer.offer_status
    #     return None
    # def get_description(self,obj):
    #     if obj.magazineoffer:
    #         return obj.magazineoffer.description
    #     return None
    # def get_created_on(self,obj):
    #     if obj.magazineoffer:
    #         return obj.magazineoffer.created_on
    #     return None
    # def get_updated_on(self,obj):
    #     if obj.magazineoffer:
    #         return obj.magazineoffer.updated_on
    #     return None
class MAGOfferListSerializer(serializers.ModelSerializer):
    price = serializers.SerializerMethodField()
    # subscription_type = serializers.SerializerMethodField()
    # days = serializers.SerializerMethodField()
    # months = serializers.SerializerMethodField()
    # price = serializers.SerializerMethodField()
    # total_price = serializers.SerializerMethodField()
    class Meta:
        model = MagazineOfferinfo
        # fields = '__all__'
        fields = ['id','users','code','price','discount','max_discount','start_date','end_date','offer_status','description','created_on','updated_on']

    def get_price(self,obj):
        # purchaseobj = MagazinePurchaseInfo.
        if obj.subscriptiontype:
            return obj.subscriptiontype.id
        return None

# magazine Subscribtion Info serializer

class SubscriptionSerializer(serializers.ModelSerializer):
    user_id = serializers.SerializerMethodField()
    subscription_type = serializers.SerializerMethodField()
    days = serializers.SerializerMethodField()
    months = serializers.SerializerMethodField()
    total_price = serializers.SerializerMethodField()
    subscription_status = serializers.SerializerMethodField()
    user_name = serializers.SerializerMethodField()
    
    class Meta:
        model = Subscription
        # fields = '__all__'
        fields = ['id','user_id','user_name','subscription_type','total_price','days','name','price','save_percentage','months','per_month_price','start_date','end_date','subscription_status','description','created_on','updated_on']


    def get_user_name(self,obj):
        if obj.users:
            return obj.users.first_name
        return None

    def get_subscription_status(self,obj):
        if obj:
            if obj.subscription_status:
                return False
            False
        return False

    def get_user_id(self,obj):
        if obj.users:
            return obj.users.id
        return None

    def get_total_price(self,obj):
        if obj.subscription:
            obj.subscription.price
            return obj.subscription.price
        return None

    def get_subscription_type(self,obj):
        if obj.subscription:
            return obj.subscription.subscription_type
        return None

    def get_days(self,obj):
        if obj.subscription:
            return obj.subscription.days
        return None

    def get_months(self,obj):
        try:
            if obj.subscription:
                if obj.subscription.subscription_type == "golden":
                    return str('3 months')
                elif obj.subscription.subscription_type == "silver":
                    return str('2 months')
                elif obj.subscription.subscription_type == "premium":
                    return str('1 months')
                return None   
            return None
        except Subscription.DoesNotExist as e:
            return None


# T country subscription list serializer
class ListcountrySerializer(serializers.ModelSerializer):
    user_id = serializers.SerializerMethodField()
    subscription_type = serializers.SerializerMethodField()
    subscription_status = serializers.SerializerMethodField()
    description = serializers.SerializerMethodField()
    # days = serializers.SerializerMethodField()
    user_name = serializers.SerializerMethodField()
    total_price = serializers.SerializerMethodField()
    # type = serializers.SerializerMethodField()
    magazine_id = serializers.SerializerMethodField()
    date = serializers.SerializerMethodField()
    expiry_date = serializers.SerializerMethodField()
    magazine_name = serializers.SerializerMethodField()
    price = serializers.SerializerMethodField()
    discount = serializers.SerializerMethodField()
    discount_price = serializers.SerializerMethodField()
    discount_to_pay = serializers.SerializerMethodField()
    class Meta:
        model = MagazinePurchaseInfo  
        # fields = '__all__'
        fields = ['id','magazine_id','months','magazine_name','user_id','user_name','subscription_type','subscription_status','description','total_price','discount','discount_price','discount_to_pay','price','date','expiry_date','create_on','updated_on']

    # def get_months(self,obj):
    #     try:
    #         if obj.subscription:
    #             if obj.subscription.subscription_type == "golden":
    #                 return str('3 months')
    #             elif obj.subscription.subscription_type == "silver":
    #                 return str('2 months')
    #             elif obj.subscription.subscription_type == "premium":
    #                 return str('1 months')
    #             return None   
    #         return None
    #     except Subscription.DoesNotExist as e:
    #         return None


    def get_price(self,obj):
        buyobj=obj.magazineInfos.buy_price
        rentobj=obj.magazineInfos.rent_price
        if buyobj:
            return buyobj
        elif rentobj:
            return rentobj
        return None


    def get_expiry_date(self,obj):
        expireobj=obj.rent_expiry_date
        if expireobj:
            return expireobj
        return None

    def get_date(self,obj):
        rentobj=obj.rent_date
        priceobj=obj.buy_date
        if rentobj:
            return rentobj
        elif priceobj:
            return priceobj

    def get_user_name(self,obj):
        if obj.users:
            return obj.users.first_name
        return None

    def get_user_id(self,obj):
        if obj.users:
            return obj.users.id
        return None

    def get_magazine_name(self,obj):
        if obj.magazineInfos:
            return obj.magazineInfos.name
        return None

    def get_magazine_id(self,obj):
        if obj.magazineInfos:
            return obj.magazineInfos.id
        return None

    def get_subscription_type(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(country=obj.subscription.country.id).last()  
            if subobj:
                return subobj.subscription_type
            return None

        except MagazinePurchaseInfo.DoesNotExist:
            return None
        
    def get_subscription_status(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(country=obj.subscription.country.id).last() 
            if subobj:

                return False
            return False
        except MagazinePurchaseInfo.DoesNotExist:
            return False

    def get_description(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(country=obj.subscription.country.id).last() 
            if subobj:
                return subobj.description
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    def get_total_price(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(country=obj.subscription.country.id).last() 
            if subobj:
                return subobj.price
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    def get_discount(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(country=obj.subscription.country.id).last() 
            if subobj:
                return subobj.discount
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    def get_discount_price(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(country=obj.subscription.country.id).last() 
            if subobj:
                subprice=subobj.price
                percentage=float(float(subprice)*float(subobj.discount)/100)
                price=round(percentage, 2)
                return price
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    def get_discount_to_pay(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(country=obj.subscription.country.id).last() 
            if subobj:
                subprice=subobj.price
                percentage=float(float(subprice)*float(subobj.discount)/100)
                discountprice=float(subprice)-float(percentage)
                price=round(discountprice, 2)
                return price
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None


# subscription list serializer
class ListSerializer(serializers.ModelSerializer):
    user_id = serializers.SerializerMethodField()
    subscription_type = serializers.SerializerMethodField()
    subscription_status = serializers.SerializerMethodField()
    description = serializers.SerializerMethodField()
    # days = serializers.SerializerMethodField()
    user_name = serializers.SerializerMethodField()
    total_price = serializers.SerializerMethodField()
    # type = serializers.SerializerMethodField()
    magazine_id = serializers.SerializerMethodField()
    date = serializers.SerializerMethodField()
    expiry_date = serializers.SerializerMethodField()
    magazine_name = serializers.SerializerMethodField()
    price = serializers.SerializerMethodField()
    discount = serializers.SerializerMethodField()
    discount_price = serializers.SerializerMethodField()
    discount_to_pay = serializers.SerializerMethodField()
    class Meta:
        model = MagazinePurchaseInfo  
        # fields = '__all__'
        fields = ['id','magazine_id','months','magazine_name','user_id','user_name','subscription_type','subscription_status','description','total_price','discount','discount_price','discount_to_pay','price','date','expiry_date','create_on','updated_on']

    # def get_months(self,obj):
    #     try:
    #         if obj.subscription:
    #             if obj.subscription.subscription_type == "golden":
    #                 return str('3 months')
    #             elif obj.subscription.subscription_type == "silver":
    #                 return str('2 months')
    #             elif obj.subscription.subscription_type == "premium":
    #                 return str('1 months')
    #             return None   
    #         return None
    #     except Subscription.DoesNotExist as e:
    #         return None


    def get_price(self,obj):
        buyobj=obj.magazineInfos.buy_price
        rentobj=obj.magazineInfos.rent_price
        if buyobj:
            return buyobj
        elif rentobj:
            return rentobj
        return None


    def get_expiry_date(self,obj):
        expireobj=obj.rent_expiry_date
        if expireobj:
            return expireobj
        return None

    def get_date(self,obj):
        rentobj=obj.rent_date
        priceobj=obj.buy_date
        if rentobj:
            return rentobj
        elif priceobj:
            return priceobj

    def get_user_name(self,obj):
        if obj.users:
            return obj.users.first_name
        return None

    def get_user_id(self,obj):
        if obj.users:
            return obj.users.id
        return None

    def get_magazine_name(self,obj):
        if obj.magazineInfos:
            return obj.magazineInfos.name
        return None

    def get_magazine_id(self,obj):
        if obj.magazineInfos:
            return obj.magazineInfos.id
        return None

    def get_subscription_type(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(country=obj.subscription.country.id).last()  
            if subobj:
                return subobj.subscription_type
            return None

        except MagazinePurchaseInfo.DoesNotExist:
            return None
        
    def get_subscription_status(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(country=obj.subscription.country.id).last() 
            if subobj:

                return True
            return False
        except MagazinePurchaseInfo.DoesNotExist:
            return False

    def get_description(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(country=obj.subscription.country.id).last() 
            if subobj:
                return subobj.description
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    def get_total_price(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(country=obj.subscription.country.id).last() 
            if subobj:
                return subobj.price
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    def get_discount(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(country=obj.subscription.country.id).last() 
            if subobj:
                return subobj.discount
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    def get_discount_price(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(country=obj.subscription.country.id).last() 
            if subobj:
                subprice=subobj.price
                percentage=float(float(subprice)*float(subobj.discount)/100)
                price=round(percentage, 2)
                return price
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    def get_discount_to_pay(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(country=obj.subscription.country.id).last() 
            if subobj:
                subprice=subobj.price
                percentage=float(float(subprice)*float(subobj.discount)/100)
                discountprice=float(subprice)-float(percentage)
                price=round(discountprice, 2)
                return price
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None


#  TEST country serializer TTTPPP
class CountryListUserSerializer(serializers.ModelSerializer):
    user_id = serializers.SerializerMethodField()
    user_name = serializers.SerializerMethodField()
    # subscription_type = serializers.SerializerMethodField()
    subscription_status = serializers.SerializerMethodField()
    # description = serializers.SerializerMethodField()
    # # # days = serializers.SerializerMethodField()
    total_price = serializers.SerializerMethodField()
    # # # type = serializers.SerializerMethodField()
    magazine_id = serializers.SerializerMethodField()
    magazine_name = serializers.SerializerMethodField()
    date = serializers.SerializerMethodField()
    expiry_date = serializers.SerializerMethodField()
    price = serializers.SerializerMethodField()
    discount = serializers.SerializerMethodField()
    discount_price = serializers.SerializerMethodField()
    discount_to_pay = serializers.SerializerMethodField()
    months =  serializers.SerializerMethodField()
    class Meta:
        model = SubscriptionType  
        # fields = '__all__'
        # fields = ['id','months','user_id','user_name','subscription_type','subscription_status','description','total_price','discount','discount_price','discount_to_pay','created_on']
        fields = ['id','magazine_id','months','magazine_name','user_id','user_name','subscription_type','subscription_status','description','total_price','discount','discount_price','discount_to_pay','price','date','expiry_date','create_on','updated_on']

    def get_months(self,obj):
        if obj.days:
            return str(obj.days)+str(' ')+str('months')
        else:
            return None
    # def get_price(self,obj):
    #     if obj.price:
    #         total=float(obj.price)
    #         price=float(total/float(obj.days))
    #         return price
    #     else:
    #         return None

    def get_price(self,obj):
        if obj.per_month_price:
            return obj.per_month_price
        else:
            return None

    def get_user_name(self,obj):
        if obj:
            return ""
        return None

    def get_user_id(self,obj):
        if obj:
            return 0
        return None

    def get_magazine_id(self,obj):
        if obj:
            return 0
        return None
        
    def get_magazine_name(self,obj):
        if obj:
            return ""
        return None

    def get_subscription_status(self,obj):
        userid = self.context.get('user_id')
        today = datetime.datetime.now()
        # purchaseonj = MagazinePurchaseInfo.objects.filter(subscription=obj.id,is_subscription=True,subscription_user_status=True, rent_expiry_date__lte = today, users=userid).first()
        purchaseonj = MagazinePurchaseInfo.objects.filter(subscription_id=obj.id,is_subscription=True,subscription_user_status=True, users_id=userid).last()
        if purchaseonj:
            return True
        else:
            return False

    def get_date(self,obj):
        if obj:
            current_date = datetime.datetime.now()
            return current_date
        return None

    def get_expiry_date(self,obj):
        if obj:
            current_date = datetime.datetime.now()
            month=int(obj.days)*30
            exp = current_date + datetime.timedelta(days=month)
            return exp
        return None

    def get_total_price(self,obj):
        if obj:
            return obj.price
        return None 

    def get_discount(self,obj):
        if obj:
            return obj.discount
        return None

    def get_discount_price(self,obj):
        if obj.price:
            percentage=float(float(obj.price)*float(obj.discount)/100)
            price=round(percentage, 2)
            return price
        return None

    def get_discount_to_pay(self,obj):

        if obj.price:
            percentage=float(float(obj.price)*float(obj.discount)/100)
            discountprice=float(obj.price)-float(percentage)
            price=round(discountprice, 2)
            return price
        return None

# TEST main serializer
class TestListUserSerializer(serializers.ModelSerializer):
    user_id = serializers.SerializerMethodField()
    subscription_type = serializers.SerializerMethodField()
    subscription_status = serializers.SerializerMethodField()
    description = serializers.SerializerMethodField()
    # days = serializers.SerializerMethodField()
    user_name = serializers.SerializerMethodField()
    total_price = serializers.SerializerMethodField()
    # type = serializers.SerializerMethodField()
    magazine_id = serializers.SerializerMethodField()
    date = serializers.SerializerMethodField()
    expiry_date = serializers.SerializerMethodField()
    magazine_name = serializers.SerializerMethodField()
    price = serializers.SerializerMethodField()
    discount = serializers.SerializerMethodField()
    discount_price = serializers.SerializerMethodField()
    discount_to_pay = serializers.SerializerMethodField()
    months =  serializers.SerializerMethodField()
    class Meta:
        model = MagazinePurchaseInfo  
        # fields = '__all__'
        fields = ['id','magazine_id','months','magazine_name','user_id','user_name','subscription_type','subscription_status','description','total_price','discount','discount_price','discount_to_pay','price','date','expiry_date','create_on','updated_on']

    def get_months(self,obj):
        if obj.months:
            return obj.months
        else:
            return None
        # try:
        #     if obj.subscription:
        #         if obj.subscription.subscription_type == "golden":
        #             return str('3 months')
        #         elif obj.subscription.subscription_type == "silver":
        #             return str('2 months')
        #         elif obj.subscription.subscription_type == "premium":
        #             return str('1 months')
        #         return None   
        #     return None
        # except Subscription.DoesNotExist as e:
        #     return None


    def get_price(self,obj):
        buyobj=obj.magazineInfos.buy_price
        rentobj=obj.magazineInfos.rent_price
        if buyobj:
            return buyobj
        elif rentobj:
            return rentobj
        return None


    def get_expiry_date(self,obj):
        expireobj=obj.rent_expiry_date
        if expireobj:
            return expireobj
        return None

    def get_date(self,obj):
        rentobj=obj.rent_date
        priceobj=obj.buy_date
        if rentobj:
            return rentobj
        elif priceobj:
            return priceobj

    def get_user_name(self,obj):
        if obj.users:
            return obj.users.first_name
        return None

    def get_user_id(self,obj):
        if obj.users:
            return obj.users.id
        return None

    def get_magazine_name(self,obj):
        if obj.magazineInfos:
            return obj.magazineInfos.name
        return None

    def get_magazine_id(self,obj):

        if obj.magazineInfos:
            return obj.magazineInfos.id
        return None

    def get_subscription_type(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(id=obj.subscription_id).last()  
            if subobj:
                return subobj.subscription_type
            return None

        except MagazinePurchaseInfo.DoesNotExist:
            return None
        
    def get_subscription_status(self,obj):

        purchase = MagazinePurchaseInfo.objects.filter(users=obj.users.id,is_subscription=True,rent_date__lte=obj.rent_date)
        if purchase:
            return True
        return False

        # try:
        #     subobj=SubscriptionType.objects.filter(id=obj.subscription_id).last() 
        #     if subobj:
        #         return subobj.subscription_status
        #     return False
        # except MagazinePurchaseInfo.DoesNotExist:
        #     return False

    def get_description(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(id=obj.subscription_id).last() 
            if subobj:
                return subobj.description
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    def get_total_price(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(id=obj.subscription_id).last() 
            if subobj:
                return subobj.price
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    def get_discount(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(id=obj.subscription_id).last() 
            if subobj:
                return subobj.discount
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    def get_discount_price(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(id=obj.subscription_id).last() 
            if subobj:
                subprice=subobj.price
                percentage=float(float(subprice)*float(subobj.discount)/100)
                discountprice=float(subprice)-float(percentage)
                price=round(percentage, 2)
                return price
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    def get_discount_to_pay(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(id=obj.subscription_id).last() 
            if subobj:
                subprice=subobj.price
                percentage=float(float(subprice)*float(subobj.discount)/100)
                discountprice=float(subprice)-float(percentage)
                price=round(discountprice, 2)
                return price
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None


# server main serializer
class ListUserSerializer(serializers.ModelSerializer):
    user_id = serializers.SerializerMethodField()
    subscription_type = serializers.SerializerMethodField()
    subscription_status = serializers.SerializerMethodField()
    description = serializers.SerializerMethodField()
    # days = serializers.SerializerMethodField()
    user_name = serializers.SerializerMethodField()
    total_price = serializers.SerializerMethodField()
    # type = serializers.SerializerMethodField()
    magazine_id = serializers.SerializerMethodField()
    date = serializers.SerializerMethodField()
    expiry_date = serializers.SerializerMethodField()
    magazine_name = serializers.SerializerMethodField()
    price = serializers.SerializerMethodField()
    discount = serializers.SerializerMethodField()
    discount_price = serializers.SerializerMethodField()
    discount_to_pay = serializers.SerializerMethodField()
    months =  serializers.SerializerMethodField()
    class Meta:
        model = MagazinePurchaseInfo
        # fields = '__all__'
        fields = ['id','magazine_id','months','magazine_name','user_id','user_name','subscription_type','subscription_status','description','total_price','discount','discount_price','discount_to_pay','price','date','expiry_date','create_on','updated_on']

    def get_months(self,obj):
        if obj.months:
            return obj.months
        else:
            return None
        # try:
        #     if obj.subscription:
        #         if obj.subscription.subscription_type == "golden":
        #             return str('3 months')
        #         elif obj.subscription.subscription_type == "silver":
        #             return str('2 months')
        #         elif obj.subscription.subscription_type == "premium":
        #             return str('1 months')
        #         return None   
        #     return None
        # except Subscription.DoesNotExist as e:
        #     return None


    # def get_price(self,obj):
    #     buyobj=obj.magazineInfos.buy_price
    #     rentobj=obj.magazineInfos.rent_price
    #     subobj = obj.subscription.price
    #     if buyobj:
    #         return buyobj
    #     elif rentobj:
    #         return rentobj
    #     # elif subobj:
    #     #     return subobj
    #     return None


    def get_price(self,obj):
        sunsobj = SubscriptionType.objects.filter(id=obj.subscription.id).last()
        if sunsobj:
            return sunsobj.per_month_price
        return None


    def get_expiry_date(self,obj):
        expireobj=obj.rent_expiry_date
        if expireobj:
            return expireobj
        return None

    def get_date(self,obj):
        rentobj=obj.rent_date
        priceobj=obj.buy_date
        if rentobj:
            return rentobj
        elif priceobj:
            return priceobj

    def get_user_name(self,obj):
        if obj.users:
            return obj.users.first_name
        return None

    def get_user_id(self,obj):
        if obj.users:
            return obj.users.id
        return None

    def get_magazine_name(self,obj):
        if obj.magazineInfos:
            return obj.magazineInfos.name
        return None

    def get_magazine_id(self,obj):

        if obj.magazineInfos:
            return obj.magazineInfos.id
        return None

    def get_subscription_type(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(id=obj.subscription_id).last()  
            if subobj:
                return subobj.subscription_type
            return None

        except MagazinePurchaseInfo.DoesNotExist:
            return None
        
    def get_subscription_status(self,obj):
        try:
            current_date = datetime.datetime.now() 
            purchase = MagazinePurchaseInfo.objects.filter(users=obj.users.id,is_subscription=True,subscription_user_status=True).last()
            duration = purchase.rent_date <=current_date <= purchase.rent_expiry_date
            if purchase and duration:
                return True
            purchase = MagazinePurchaseInfo.objects.filter(users=obj.users.id,is_subscription=True).update(subscription_user_status=False)
            return False
        except MagazinePurchaseInfo.DoesNotExist:
            return False

    def get_description(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(id=obj.subscription_id).last()
            if subobj:
                return subobj.description
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    def get_total_price(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(id=obj.subscription_id).last() 
            if subobj:
                return subobj.price
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    def get_discount(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(id=obj.subscription_id).last() 
            if subobj:
                return subobj.discount
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    def get_discount_price(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(id=obj.subscription_id).last() 
            if subobj:
                subprice=subobj.price
                percentage=float(float(subprice)*float(subobj.discount)/100)
                discountprice=float(subprice)-float(percentage)
                price=round(percentage, 2)
                return price
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    def get_discount_to_pay(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(id=obj.subscription_id).last() 
            if subobj:
                subprice=subobj.price
                percentage=float(float(subprice)*float(subobj.discount)/100)
                discountprice=float(subprice)-float(percentage)
                price=round(discountprice, 2)
                return price
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

# subscription main serializer
class SListUserSerializer(serializers.ModelSerializer):
    user_id = serializers.SerializerMethodField()
    subscription_type = serializers.SerializerMethodField()
    subscription_status = serializers.SerializerMethodField()
    description = serializers.SerializerMethodField()
    # days = serializers.SerializerMethodField()
    user_name = serializers.SerializerMethodField()
    total_price = serializers.SerializerMethodField()
    # type = serializers.SerializerMethodField()
    magazine_id = serializers.SerializerMethodField()
    date = serializers.SerializerMethodField()
    expiry_date = serializers.SerializerMethodField()
    magazine_name = serializers.SerializerMethodField()
    price = serializers.SerializerMethodField()
    discount = serializers.SerializerMethodField()
    discount_price = serializers.SerializerMethodField()
    discount_to_pay = serializers.SerializerMethodField()
    months =  serializers.SerializerMethodField()
    class Meta:
        model = MagazinePurchaseInfo
        # fields = '__all__'
        fields = ['id','magazine_id','months','magazine_name','user_id','user_name','subscription_type','subscription_status','description','total_price','discount','discount_price','discount_to_pay','price','date','expiry_date','create_on','updated_on']

    def get_months(self,obj):
        if obj.months:
            return obj.months
        else:
            return None
        # try:
        #     if obj.subscription:
        #         if obj.subscription.subscription_type == "golden":
        #             return str('3 months')
        #         elif obj.subscription.subscription_type == "silver":
        #             return str('2 months')
        #         elif obj.subscription.subscription_type == "premium":
        #             return str('1 months')
        #         return None   
        #     return None
        # except Subscription.DoesNotExist as e:
        #     return None


    # def get_price(self,obj):
    #     buyobj=obj.magazineInfos.buy_price
    #     rentobj=obj.magazineInfos.rent_price
    #     subobj = obj.subscription.price
    #     if buyobj:
    #         return buyobj
    #     elif rentobj:
    #         return rentobj
    #     # elif subobj:
    #     #     return subobj
    #     return None


    def get_price(self,obj):
        sunsobj = SubscriptionType.objects.filter(id=obj.subscription.id).last()
        if sunsobj:
            return sunsobj.per_month_price
        return None


    def get_expiry_date(self,obj):
        expireobj=obj.rent_expiry_date
        if expireobj:
            return expireobj
        return None

    def get_date(self,obj):
        rentobj=obj.rent_date
        priceobj=obj.buy_date
        if rentobj:
            return rentobj
        elif priceobj:
            return priceobj

    def get_user_name(self,obj):
        if obj.users:
            return obj.users.first_name
        return None

    def get_user_id(self,obj):
        if obj.users:
            return obj.users.id
        return None

    def get_magazine_name(self,obj):
        # if obj.magazineInfos:
        #     return obj.magazineInfos.name
        return None

    def get_magazine_id(self,obj):

        # if obj.magazineInfos:
        #     return obj.magazineInfos.id
        return None

    def get_subscription_type(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(id=obj.subscription_id).last()  
            if subobj:
                return subobj.subscription_type
            return None

        except MagazinePurchaseInfo.DoesNotExist:
            return None
        
    def get_subscription_status(self,obj):
        try:
            current_date = datetime.datetime.now() 
            purchase = MagazinePurchaseInfo.objects.filter(users=obj.users.id,is_subscription=True,subscription_user_status=True).last()
            duration = purchase.rent_date <=current_date <= purchase.rent_expiry_date
            if purchase and duration:
                return True
            purchase = MagazinePurchaseInfo.objects.filter(users=obj.users.id,is_subscription=True).update(subscription_user_status=False)
            return False
        except MagazinePurchaseInfo.DoesNotExist:
            return False

    def get_description(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(id=obj.subscription_id).last()
            if subobj:
                return subobj.description
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    def get_total_price(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(id=obj.subscription_id).last() 
            if subobj:
                return subobj.price
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    def get_discount(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(id=obj.subscription_id).last() 
            if subobj:
                return subobj.discount
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    def get_discount_price(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(id=obj.subscription_id).last() 
            if subobj:
                subprice=subobj.price
                percentage=float(float(subprice)*float(subobj.discount)/100)
                discountprice=float(subprice)-float(percentage)
                price=round(percentage, 2)
                return price
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    def get_discount_to_pay(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(id=obj.subscription_id).last() 
            if subobj:
                subprice=subobj.price
                percentage=float(float(subprice)*float(subobj.discount)/100)
                discountprice=float(subprice)-float(percentage)
                price=round(discountprice, 2)
                return price
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None


class UserPurchaseListSerializer(serializers.ModelSerializer):
    user_subscription = serializers.SerializerMethodField()
    subscription_list = serializers.SerializerMethodField()
    class Meta:
        model = User
        # fields = '__all__'
        fields = ['user_subscription','subscription_list']

    def get_user_subscription(self,obj):
        # subobj = SubscriptionType.objects.filter(country=countryis).values_list('id',flat=True)
        mysublist = MagazinePurchaseInfo.objects.filter(users=obj.id,is_subscription=True).last()
        # print(mysublist.id,'========my')
        serializerdata = ListUserSerializer(mysublist,many=False)
        if serializerdata:
            return [serializerdata.data]
        return None

    def get_subscription_list(self,obj):
        mysublist = MagazinePurchaseInfo.objects.filter(users = obj.id,is_subscription=True).all()
        # print(mysublist,'====mysub')
        serializerdata = ListUserSerializer(mysublist,many=True)
        if serializerdata:
            return serializerdata.data
        return None


class UserPurchCountrySerializer(serializers.ModelSerializer):
    user_subscription = serializers.SerializerMethodField()
    subscription_list = serializers.SerializerMethodField()
    class Meta:
        model = Country
        # fields = '__all__'
        fields = ['user_subscription','subscription_list']

    def get_user_subscription(self,obj):
        return [ ]

    def get_subscription_list(self,obj):
    
        subobj = SubscriptionType.objects.filter(country_id=obj.id).values_list('id',flat=True)
        # mysublist = MagazinePurchaseInfo.objects.filter(subscription__in=subobj,is_subscription=True)
        mysublist = MagazinePurchaseInfo.objects.filter(subscription__in=subobj,is_subscription=True).all()
        serializerdata = ListSerializer(mysublist,many=True)
        if serializerdata:
            return serializerdata.data
        return None
    
class CountrybaseSerializer(serializers.ModelSerializer):
    # user_subscription = serializers.SerializerMethodField()
    subscription_list = serializers.SerializerMethodField()
    class Meta:
        model = Country
        # fields = '__all__'
        fields = ['subscription_list']

    # def get_user_subscription(self,obj):
    #     return [ ]

    def get_subscription_list(self,obj):
    
        subobj = SubscriptionType.objects.filter(country_id=obj.id).values_list('id',flat=True)
        # mysublist = MagazinePurchaseInfo.objects.filter(subscription__in=subobj,is_subscription=True)
        mysublist = MagazinePurchaseInfo.objects.filter(subscription__in=subobj,is_subscription=True).all()
        serializerdata = ListcountrySerializer(mysublist,many=True)
        if serializerdata:
            return serializerdata.data
        return None

class SortCountryListSerializer(serializers.ModelSerializer):
    months = serializers.SerializerMethodField()
    country_id = serializers.SerializerMethodField()
    # subscription_status = serializers.SerializerMethodField()
    # description = serializers.SerializerMethodField()
    # # days = serializers.SerializerMethodField()
    # user_name = serializers.SerializerMethodField()
    # total_price = serializers.SerializerMethodField()
    # # type = serializers.SerializerMethodField()
    # magazine_id = serializers.SerializerMethodField()
    # date = serializers.SerializerMethodField()
    # expiry_date = serializers.SerializerMethodField()
    # magazine_name = serializers.SerializerMethodField()
    # price = serializers.SerializerMethodField()
    # discount = serializers.SerializerMethodField()
    # discount_price = serializers.SerializerMethodField()
    # discount_to_pay = serializers.SerializerMethodField()
    class Meta:
        model = SubscriptionType  
        # fields = '__all__'
        fields = ['id','country_id','months','subscription_type','description','discount','price','created_on']

    def get_months(self,obj):
        try:
            if obj.days:
                return obj.days
            return None
        except SubscriptionType.DoesNotExist as e:
            return None

    def get_country_id(self,obj):
        try:
            if obj.country:
                return obj.country.id
            return None
        except SubscriptionType.DoesNotExist:
            return None

class SortCountrySerializer(serializers.ModelSerializer):
    user_subscription = serializers.SerializerMethodField()
    subscription_list = serializers.SerializerMethodField()
    class Meta:
        model = Country
        # fields = '__all__'
        fields = ['user_subscription','subscription_list']

    def get_user_subscription(self,obj):
        return [ ]

    def get_subscription_list(self,obj):

        subobj = SubscriptionType.objects.filter(country_id=obj.id)
        print(subobj,'====subobj')
        # mysublist = MagazinePurchaseInfo.objects.filter(subscription__in=subobj,is_subscription=True).all()
        print(subobj,"====mysublist")
        serializerdata = SortCountryListSerializer(subobj,many=True)
        print(serializerdata.data,'=================data')
        if serializerdata:
            return serializerdata.data
        return None

class CpppSortCountryListSerializer(serializers.ModelSerializer):
    months = serializers.SerializerMethodField()
    country_id = serializers.SerializerMethodField()
    # subscription_status = serializers.SerializerMethodField()
    # description = serializers.SerializerMethodField()
    # # days = serializers.SerializerMethodField()
    # user_name = serializers.SerializerMethodField()
    # total_price = serializers.SerializerMethodField()
    # # type = serializers.SerializerMethodField()
    # magazine_id = serializers.SerializerMethodField()
    # date = serializers.SerializerMethodField()
    # expiry_date = serializers.SerializerMethodField()
    # magazine_name = serializers.SerializerMethodField()
    # price = serializers.SerializerMethodField()
    # discount = serializers.SerializerMethodField()
    # discount_price = serializers.SerializerMethodField()
    # discount_to_pay = serializers.SerializerMethodField()
    class Meta:
        model = SubscriptionType  
        # fields = '__all__'
        fields = ['id','country_id','months','subscription_type','description','discount','price','created_on']

    def get_months(self,obj):
        try:
            if obj.days:
                return obj.days
            return None
        except SubscriptionType.DoesNotExist as e:
            return None

    def get_country_id(self,obj):
        try:
            if obj.country:
                return obj.country.id
            return None
        except SubscriptionType.DoesNotExist:
            return None

class PPListSerializer(serializers.ModelSerializer):
    user_id = serializers.SerializerMethodField()
    subscription_type = serializers.SerializerMethodField()
    subscription_status = serializers.SerializerMethodField()
    description = serializers.SerializerMethodField()
    # days = serializers.SerializerMethodField()
    user_name = serializers.SerializerMethodField()
    total_price = serializers.SerializerMethodField()
    # type = serializers.SerializerMethodField()
    magazine_id = serializers.SerializerMethodField()
    date = serializers.SerializerMethodField()
    expiry_date = serializers.SerializerMethodField()
    magazine_name = serializers.SerializerMethodField()
    price = serializers.SerializerMethodField()
    discount = serializers.SerializerMethodField()
    discount_price = serializers.SerializerMethodField()
    discount_to_pay = serializers.SerializerMethodField()
    class Meta:
        model = MagazinePurchaseInfo  
        # fields = '__all__'
        fields = ['id','magazine_id','months','magazine_name','user_id','user_name','subscription_type','subscription_status','description','total_price','discount','discount_price','discount_to_pay','price','date','expiry_date','create_on','updated_on']

    # def get_months(self,obj):
    #     try:
    #         if obj.subscription:
    #             if obj.subscription.subscription_type == "golden":
    #                 return str('3 months')
    #             elif obj.subscription.subscription_type == "silver":
    #                 return str('2 months')
    #             elif obj.subscription.subscription_type == "premium":
    #                 return str('1 months')
    #             return None   
    #         return None
    #     except Subscription.DoesNotExist as e:
    #         return None


    def get_price(self,obj):
        buyobj=obj.magazineInfos.buy_price
        rentobj=obj.magazineInfos.rent_price
        if buyobj:
            return buyobj
        elif rentobj:
            return rentobj
        return None


    def get_expiry_date(self,obj):
        expireobj=obj.rent_expiry_date
        if expireobj:
            return expireobj
        return None

    def get_date(self,obj):
        rentobj=obj.rent_date
        priceobj=obj.buy_date
        if rentobj:
            return rentobj
        elif priceobj:
            return priceobj

    def get_user_name(self,obj):
        if obj.users:
            return obj.users.first_name
        return None

    def get_user_id(self,obj):
        if obj.users:
            return obj.users.id
        return None

    def get_magazine_name(self,obj):
        if obj.magazineInfos:
            return obj.magazineInfos.name
        return None

    def get_magazine_id(self,obj):
        if obj.magazineInfos:
            return obj.magazineInfos.id
        return None

    def get_subscription_type(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(country=obj.subscription.country.id).last()  
            if subobj:
                return subobj.subscription_type
            return None

        except MagazinePurchaseInfo.DoesNotExist:
            return None
        
    def get_subscription_status(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(country=obj.subscription.country.id).last() 
            if subobj:

                return True
            return False
        except MagazinePurchaseInfo.DoesNotExist:
            return False

    def get_description(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(country=obj.subscription.country.id).last() 
            if subobj:
                return subobj.description
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    def get_total_price(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(country=obj.subscription.country.id).last() 
            if subobj:
                return subobj.price
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    def get_discount(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(country=obj.subscription.country.id).last() 
            if subobj:
                return subobj.discount
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    def get_discount_price(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(country=obj.subscription.country.id).last() 
            if subobj:
                subprice=subobj.price
                percentage=float(float(subprice)*float(subobj.discount)/100)
                price=round(percentage, 2)
                return price
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    def get_discount_to_pay(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(country=obj.subscription.country.id).last() 
            if subobj:
                subprice=subobj.price
                percentage=float(float(subprice)*float(subobj.discount)/100)
                discountprice=float(subprice)-float(percentage)
                price=round(discountprice, 2)
                return price
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

class pppSortCountrySerializer(serializers.ModelSerializer):
    user_subscription = serializers.SerializerMethodField()
    subscription_list = serializers.SerializerMethodField()
    class Meta:
        model = Country
        # fields = '__all__'
        fields = ['user_subscription','subscription_list']

    def get_user_subscription(self,obj):
        return [ ]

    def get_subscription_list(self,obj):

        subobj = SubscriptionType.objects.filter(country_id=obj.id)
        print(subobj,'====subobj')
        # mysublist = MagazinePurchaseInfo.objects.filter(subscription__in=subobj,is_subscription=True).all()
        print(subobj,"====mysublist")
        serializerdata = SortCountryListSerializer(subobj,many=True)
        print(serializerdata.data,'=================data')
        if serializerdata:
            return serializerdata.data
        return None



# user login subscription
class UserSubscriptionListSerializer(serializers.ModelSerializer):
    user_id = serializers.SerializerMethodField()
    subscription_type = serializers.SerializerMethodField()
    subscription_status = serializers.SerializerMethodField()
    description = serializers.SerializerMethodField()
    user_name = serializers.SerializerMethodField()

    # subscription_list = serializers.SerializerMethodField()
    class Meta:
        model = MagazinePurchaseInfo
        # fields = '__all__'
        fields = ['id','user_id','user_name','subscription_type','subscription_status','description','create_on','updated_on']


    def get_user_name(self,obj):
        if obj.users:
            return obj.users.first_name
        return None

    def get_user_id(self,obj):
        if obj.users:
            return obj.users.id
        return None


    def get_subscription_type(self,obj):
        try:
            # subobj=SubscriptionType.objects.filter(country=obj.users.country).last()
            # subobj=SubscriptionType.objects.filter(id=obj.subscription.id).last()
            print(obj.subscription)
            if obj.subscription:
                return obj.subscription.subscription_type
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None
        
    def get_subscription_status(self,obj):
        try:
            # subobj=SubscriptionType.objects.filter(country=obj.users.country).last()
            # subobj=SubscriptionType.objects.filter(id=obj.subscription.id).last()
            if obj.subscription:
                return obj.subscription.subscription_status
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    def get_description(self,obj):
        try:
            # subobj=SubscriptionType.objects.filter(country=obj.users.country).last()
            # subobj=SubscriptionType.objects.filter(id=obj.subscription.id).last()
            if obj.subscription:
                return obj.subscription.description
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None
class SubscriptionListSerializer(serializers.ModelSerializer):
    user_id = serializers.SerializerMethodField()
    subscription_type = serializers.SerializerMethodField()
    subscription_status = serializers.SerializerMethodField()
    description = serializers.SerializerMethodField()
    # days = serializers.SerializerMethodField()
    user_name = serializers.SerializerMethodField()
    total_price = serializers.SerializerMethodField()
    # type = serializers.SerializerMethodField()
    magazine_id = serializers.SerializerMethodField()
    date = serializers.SerializerMethodField()
    expiry_date = serializers.SerializerMethodField()
    magazine_name = serializers.SerializerMethodField()
    price = serializers.SerializerMethodField()
    months = serializers.SerializerMethodField()
    # subscription_list = serializers.SerializerMethodField()
    class Meta:
        model = MagazinePurchaseInfo
        # fields = '__all__'
        fields = ['id','magazine_id','months','magazine_name','user_id','user_name','subscription_type','subscription_status','description','total_price','price','date','expiry_date','create_on','updated_on']

    # def get_subscription_list(self,obj):
    #         mysublist = MagazinePurchaseInfo.objects.all()
    #         serializer = ListSerializer(mysublist,many=True)
    #         if serializer:
    #             return serializer.data
    #         return None

    def get_months(self,obj):
        try:
            if obj.subscription:
                if obj.subscription.subscription_type == "golden":
                    return str('3 months')
                elif obj.subscription.subscription_type == "silver":
                    return str('2 months')
                elif obj.subscription.subscription_type == "premium":
                    return str('1 months')
                return None   
            return None
        except SubscriptionType.DoesNotExist as e:
            return None
    # def get_price(self,obj):
    #     buyobj=obj.buy_price
    #     if buyobj:
    #         return buyobj
    #     return None

    # def get_price(self,obj):
    #     try:
    #         subobj=SubscriptionType.objects.filter(country=obj.users.country).last()
    #         if subobj:
    #             return subobj.price
    #         return None
    #     except MagazinePurchaseInfo.DoesNotExist:
    #         return None

    def get_price(self,obj):
        buyobj=obj.magazineInfos.buy_price
        rentobj=obj.magazineInfos.rent_price
        if buyobj:
            return buyobj
        elif rentobj:
            return rentobj
        return None


    def get_expiry_date(self,obj):
        expireobj=obj.rent_expiry_date
        if expireobj:
            return expireobj
        return None

    def get_date(self,obj):
        rentobj=obj.rent_date
        priceobj=obj.buy_date
        if rentobj:
            return rentobj
        elif priceobj:
            return priceobj

    def get_user_name(self,obj):
        if obj.users:
            return obj.users.first_name
        return None

    def get_user_id(self,obj):
        if obj.users:
            return obj.users.id
        return None

    def get_magazine_name(self,obj):
        if obj.magazineInfos:
            return obj.magazineInfos.name
        return None

    def get_magazine_id(self,obj):
        if obj.magazineInfos:
            return obj.magazineInfos.id
        return None

    def get_subscription_type(self,obj):
        try:
            # subobj=SubscriptionType.objects.filter(country=obj.users.country).last()
            subobj=SubscriptionType.objects.filter(id=obj.subscription.id).last()
            if subobj:
                return subobj.subscription_type
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None
        
    def get_subscription_status(self,obj):
        try:
            # subobj=SubscriptionType.objects.filter(country=obj.users.country).last()
            subobj=SubscriptionType.objects.filter(id=obj.subscription.id).last()
            if subobj:
                return subobj.subscription_status
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    def get_description(self,obj):
        try:
            # subobj=SubscriptionType.objects.filter(country=obj.users.country).last()
            subobj=SubscriptionType.objects.filter(id=obj.subscription.id).last()
            if subobj:
                return subobj.description
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None
    # def get_days(self,obj):
    #     try:
    #         subobj=SubscriptionType.objects.filter(subscription=obj.subscription_id).last()
    #         if subobj:
    #             return subobj.days
    #         return None
    #     except MagazinePurchaseInfo.DoesNotExist:
    #         return None

    # def get_type(self,obj):
    #     try:
    #         if obj.users.country:

    #             subobj=SubscriptionType.objects.filter(country=obj.users.country).last()
    #             if subobj:
    #                 return subobj.type
    #             return None
    #         return None
    #     except MagazinePurchaseInfo.DoesNotExist:
    #         return None

    # def get_total_price(self,obj):
    #     try:
    #         subobj=SubscriptionType.objects.filter(country=obj.users.country).last()
    #         if subobj:
    #             return subobj.price
    #         return None
    #     except MagazinePurchaseInfo.DoesNotExist:
    #         return None


    def get_total_price(self,obj):
        if obj.subscription_price:
            return obj.subscription_price
        return None

# class UserPurchaseListSerializer(serializers.ModelSerializer):
#     user_subscription = serializers.SerializerMethodField()
#     subscription_list = serializers.SerializerMethodField()
#     class Meta:
#         model = User
#         # fields = '__all__'
#         fields = ['user_subscription','subscription_list']

#     def get_user_subscription(self,obj):
#         # subobj = SubscriptionType.objects.filter(country=countryis).values_list('id',flat=True)
#         mysublist = MagazinePurchaseInfo.objects.filter(users=obj.id,is_subscription=True).last()
#         print(mysublist.id,'========my')
#         serializerdata = ListUserSerializer(mysublist,many=False)
#         if serializerdata:
#             return [serializerdata.data]
#         return None

#     def get_subscription_list(self,obj):
#         mysublist = MagazinePurchaseInfo.objects.filter(users = obj.id,is_subscription=True).all()
#         # print(mysublist,'====mysub')
#         serializerdata = ListUserSerializer(mysublist,many=True)
#         if serializerdata:
#             return serializerdata.data
#         return None

# # class UserPurchCountrySerializer(serializers.ModelSerializer):
# #     user_subscription = serializers.SerializerMethodField()
# #     subscription_list = serializers.SerializerMethodField()
# #     class Meta:
# #         model = Country
# #         # fields = '__all__'
# #         fields = ['user_subscription','subscription_list']

# #     def get_user_subscription(self,obj):
# #         return [ ]

# #     def get_subscription_list(self,obj):
# #         countryis = obj.id
# #         print(countryis,'====id')
# #         subobj = SubscriptionType.objects.filter(country=countryis).values_list('id',flat=True)
# #         print(subobj,'====subobj ')
# #         # mysublist = MagazinePurchaseInfo.objects.filter(subscription__in=subobj,is_subscription=True)
# #         mysublist = MagazinePurchaseInfo.objects.filter(subscription__in=subobj,is_subscription=True).all()
# #         print(mysublist,"====mysublist")
# #         serializerdata = ListSerializer(mysublist,many=True)
# #         print(serializerdata.data,'=================data')
# #         if serializerdata:
# #             return serializerdata.data
# #         return None

# class UserPurchCountrySerializer(serializers.ModelSerializer):
#     user_subscription = serializers.SerializerMethodField()
#     subscription_list = serializers.SerializerMethodField()
#     class Meta:
#         model = Country
#         # fields = '__all__'
#         fields = ['user_subscription','subscription_list']

#     def get_user_subscription(self,obj):
#         return [ ]

#     def get_subscription_list(self,obj):
    
#         subobj = SubscriptionType.objects.filter(country_id=obj.id).values_list('id',flat=True)
#         print(subobj,'====subobj>>>>>>>>>>>>>>>>>>>>> ')
#         # mysublist = MagazinePurchaseInfo.objects.filter(subscription__in=subobj,is_subscription=True)
#         mysublist = MagazinePurchaseInfo.objects.filter(subscription__in=subobj,is_subscription=True).all()
#         print(mysublist,"====mysublist")
#         serializerdata = ListSerializer(mysublist,many=True)
#         print(serializerdata.data,'=================data')
#         if serializerdata:
#             return serializerdata.data
#         return None


class MagazineSubscriptionInfoSerializer(serializers.ModelSerializer):
    user_id = serializers.SerializerMethodField()
    subscription_type = serializers.SerializerMethodField()
    days = serializers.SerializerMethodField()
    months = serializers.SerializerMethodField()
    total_price = serializers.SerializerMethodField()
    user_name = serializers.SerializerMethodField()
    class Meta:
        model = Subscription
        # fields = '__all__'
        fields = ['id','user_id','user_name','subscription_type','total_price','days','name','price','save_percentage','months','per_month_price','start_date','end_date','subscription_status','description','created_on','updated_on']


    def get_user_name(self,obj):
        if obj.users:
            return obj.users.first_name
        return None

    def get_user_id(self,obj):
        if obj.users:
            return obj.users.id
        return None

    def get_total_price(self,obj):
        if obj.subscription:
            obj.subscription.price
            return obj.subscription.price
        return None

    def get_subscription_type(self,obj):
        if obj.subscription:
            return obj.subscription.subscription_type
        return None

    def get_days(self,obj):
        if obj.subscription:
            return obj.subscription.days
        return None

    def get_months(self,obj):
        try:
            if obj.subscription:
                if obj.subscription.subscription_type == "golden":
                    return str('3 months')
                elif obj.subscription.subscription_type == "silver":
                    return str('2 months')
                elif obj.subscription.subscription_type == "premium":
                    return str('1 months')
                return None   
            return None
        except Subscription.DoesNotExist as e:
            return None



# Post magazine order History serializer
class MagazineOrderHistorySerializer(serializers.ModelSerializer):
    class Meta:
        model = MagazineOrderinfo
        # fields = '__all__'
        fields = ['id','transaction_id','magazines','users','subscriptions','magazineOffers','magazinePurchase','created_on','updated_on']



class MagazineOrderdataSerializer(serializers.ModelSerializer):
    magazine_id = serializers.SerializerMethodField()
    user_id = serializers.SerializerMethodField()
    subscription_id = serializers.SerializerMethodField()
    magazineOffer_id = serializers.SerializerMethodField()
    magazinePurchase_id = serializers.SerializerMethodField()
    class Meta:
        model = MagazineOrderinfo
        # fields = '__all__'
        fields = ['id','transaction_id','magazine_id','user_id','subscription_id','magazineOffer_id','magazinePurchase_id','created_on','updated_on']

    def get_magazine_id(self,obj):
        if obj.magazines:
            return obj.magazines.id
        return None

    def get_user_id(self,obj):
        if obj.users:
            return obj.users.id
        return None

    def get_subscription_id(self,obj):
        if obj.subscriptions:
            return obj.subscriptions.id
        return None

    def get_magazineOffer_id(self,obj):
        if obj.magazineOffers:
            return obj.magazineOffers.id
        return None

    def get_magazinePurchase_id(self,obj):
        if obj.magazinePurchase:
            return obj.magazinePurchase.id
        return None

#####################################################################################
# Magazine Order Detail Serializer 
class MagazineOrderDetailSerializer(serializers.ModelSerializer):
    magazine_id = serializers.SerializerMethodField()
    magazine_name = serializers.SerializerMethodField()
    user_id = serializers.SerializerMethodField()
    user_name = serializers.SerializerMethodField()
    price = serializers.SerializerMethodField()
    total_order_price = serializers.SerializerMethodField()
    magazine_author = serializers.SerializerMethodField()
    cover_pic = serializers.SerializerMethodField()
    magazine_ratting = serializers.SerializerMethodField()
    purchase_type = serializers.SerializerMethodField()
    currency = serializers.SerializerMethodField()
    read_count = serializers.SerializerMethodField()
    class Meta:
        model = MagazinePurchaseInfo
        # fields = '__all__'
        fields = ['id','transaction_id','is_hard_copy','purchases_order_id','read_count','currency','purchase_type','user_id','user_name','magazine_id','magazine_name','magazine_ratting','price','total_order_price','magazine_author','cover_pic','delivery_date','delivery_location','create_on','updated_on']

    def get_read_count(self,obj):
        readobj = MagazinePurchaseInfo.objects.filter(users=obj.users.id).all().count()
        if readobj:
            return readobj
        return None

    def get_currency(self,obj):
        if obj:
            return str('USD')
        return None

    def get_purchase_type(self,obj):
        if obj:
            return obj.purchases_type
        return None

    def get_magazine_id(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
        if magazineobj:
            return magazineobj.id
        return None

    def get_magazine_name(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
        if magazineobj:
            return magazineobj.name
        return None

    def get_magazine_ratting(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
        if magazineobj:
            return magazineobj.ratting
        return None

    def get_price(self,obj):
        try:
            magazineobj = MagazinePurchaseInfo.objects.filter(id=obj.id).last()
            print()
            if magazineobj:
                if magazineobj.buy_price:
                    return magazineobj.buy_price
                elif magazineobj.rent_price:
                    return magazineobj.rent_price
                elif magazineobj.subscription_price:
                    return magazineobj.subscription_price
            return None
        except MagazinePurchaseInfo.DoesNotExist as e:
            return None
    # def get_price(self,obj):
    #     try:
    #         magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
    #         if magazineobj:
    #             if magazineobj.buy_price:
    #                 print(magazineobj.buy_price,'====magazineobj.buy_price')
    #                 return magazineobj.buy_price
    #             elif magazineobj.rent_price:
    #                 print(magazineobj.rent_price,'=====magazineobj.rent_price')
    #                 return magazineobj.rent_price
    #         return None
    #     except MagazinePurchaseInfo.DoesNotExist as e:
    #         return None
    def get_total_order_price(self,obj):
        try:
            magazineobj = MagazinePurchaseInfo.objects.filter(id=obj.id).last()
            print()
            if magazineobj:
                if magazineobj.buy_price:
                    return magazineobj.buy_price
                elif magazineobj.rent_price:
                    return magazineobj.rent_price
                elif magazineobj.subscription_price:
                    return magazineobj.subscription_price
            return None
        except MagazinePurchaseInfo.DoesNotExist as e:
            return None

    def get_magazine_rent_price(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
        if magazineobj:
            return magazineobj.rent_price
        return None

    def get_cover_pic(self,obj):
        try:
            if obj:
                magazineobj=MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
                serializer = MagazineInfosCoverPicSerializer(magazineobj, many=False)
                return serializer.data
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    # def get_magazine_author(self,obj):
    #     auth = Author.objects.filter(id=obj.magazineInfos.author_id).all()
    #     if auth:
    #         return AuthorSerializer(auth,many=True).data
    #     return None

    def get_magazine_author(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).values_list('id',flat=True)
        maputhorobj = MagMapAuthor.objects.filter(magazine__in=magazineobj)
        authordata = PTestmagazineSerializer(maputhorobj,many=True)
        if authordata:
            return authordata.data
        return None

    def get_user_id(self,obj):
        userobj = User.objects.filter(id=obj.users.id).last()
        if userobj:
            return userobj.id
        return None

    def get_user_name(self,obj):
        userobj = User.objects.filter(id=obj.users.id).last()
        if userobj:
            return userobj.first_name
        return None

        
# get magazine order History info serializer
class MGAOrderHistorySerializer(serializers.ModelSerializer):
    magazine_id = serializers.SerializerMethodField()
    magazine_name = serializers.SerializerMethodField()
    user_id = serializers.SerializerMethodField()
    user_name = serializers.SerializerMethodField()
    magazine_price = serializers.SerializerMethodField()
    magazine_rent_price = serializers.SerializerMethodField()
    magazine_author = serializers.SerializerMethodField()
    cover_pic = serializers.SerializerMethodField()
    magazine_ratting = serializers.SerializerMethodField()
    purchase_type = serializers.SerializerMethodField()
    price = serializers.SerializerMethodField()
    total_order_price = serializers.SerializerMethodField()
    order_id = serializers.SerializerMethodField()
    class Meta:
        model = MagazinePurchaseInfo
        # fields = '__all__'
        fields = ['id','transaction_id','is_hard_copy','order_id','price','total_order_price','delivery_date','delivery_location','purchases_order_id','purchase_type','user_id','user_name','magazine_id','magazine_name','magazine_ratting','magazine_price','magazine_rent_price','magazine_author','cover_pic','create_on','updated_on']

    def get_order_id(self,obj):
        if obj.id:
            return obj.id
        return None

    def get_price(self,obj):
        try:
            magazineobj = MagazinePurchaseInfo.objects.filter(id=obj.id).last()
            if magazineobj:
                if magazineobj.buy_price:
                    return magazineobj.buy_price
                elif magazineobj.rent_price:
                    return magazineobj.rent_price
                elif magazineobj.subscription_price:
                    return magazineobj.subscription_price
            return None
        except MagazinePurchaseInfo.DoesNotExist as e:
            return None
    # def get_price(self,obj):
    #     try:
    #         magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
    #         if magazineobj:
    #             if magazineobj.buy_price:
    #                 return magazineobj.buy_price
    #             elif magazineobj.rent_price:
    #                 return magazineobj.rent_price
    #         return None
    #     except MagazinePurchaseInfo.DoesNotExist as e:
    #         return None

    def get_total_order_price(self,obj):
        try:
            magazineobj = MagazinePurchaseInfo.objects.filter(id=obj.id).last()
            if magazineobj:
                if magazineobj.buy_price:
                    return magazineobj.buy_price
                elif magazineobj.rent_price:
                    return magazineobj.rent_price
                elif magazineobj.subscription_price:
                    return magazineobj.subscription_price
            return None
        except MagazinePurchaseInfo.DoesNotExist as e:
            return None

    # def get_price(self,obj):
    #     try:
    #         priceobj = MagazineInfo.objects.filter(id=obj.magazines.id).last()
    #         print(priceobj,'====data purchase===')
    #         if priceobj:
    #                 return priceobj.buy_price
    #         return None
    #     except MagazineOrderinfo.DoesNotExist as e:
    #         return None
    # def get_price(self,obj):
    #     try:
    #         purchaseobj = MagazinePurchaseInfo.objects.filter(id=obj.magazinePurchase.id).last()
    #         print(purchaseobj,'====data purchase===')
    #         if purchaseobj:
    #             buyobj=purchaseobj.buy_price
    #             print(buyobj,'====buy price')
    #             rentobj=purchaseobj.rent_price
    #             print(rentobj,'===rent price==')
    #             if buyobj:
    #                 return buyobj
    #             elif rentobj:
    #                 return rentobj
    #         return None
    #     except MagazineOrderinfo.DoesNotExist as e:
    #         return None

    def get_purchase_type(self,obj):
        if obj:
            return obj.purchases_type
        return None

    def get_magazine_id(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
        if magazineobj:
            return magazineobj.id
        return None

    def get_magazine_name(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
        if magazineobj:
            return magazineobj.name
        return None

    def get_magazine_ratting(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
        if magazineobj:
            return magazineobj.ratting
        return None

    def get_magazine_price(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
        if magazineobj:
            return magazineobj.buy_price
        return None


    def get_magazine_rent_price(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
        if magazineobj:
            return magazineobj.rent_price
        return None

    # def get_magazine_rent_price(self,obj):
    #     magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
    #     if magazineobj:
    #         return magazineobj.rent_price
    #     return None

    def get_cover_pic(self,obj):
        try:
            if obj:
                magazineobj=MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
                serializer = MagazineInfosCoverPicSerializer(magazineobj, many=False)
                return serializer.data
            return None
        except MagazineInfo.DoesNotExist:
            return None

    # def get_magazine_url(self,obj):
    #     try:
    #         if obj.id:
    #             magazineobj=MegazinePages.objects.filter(magazine=obj.magazine.id).last()
    #             if magazineobj:
    #                 serializer = MegazinePagesSerializer(magazineobj).data
    #                 return serializer
    #             return None
    #         return None
    #     except MagazineInfo.DoesNotExist:
    #         return None

    # def get_magazine_author(self,obj):
    #     auth = Author.objects.filter(id=obj.magazineInfos.author_id).all()
    #     if auth:
    #         return AuthorSerializer(auth,many=True).data
    #     return None

    def get_magazine_author(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).values_list('id',flat=True)
        maputhorobj = MagMapAuthor.objects.filter(magazine__in=magazineobj)
        authordata = PTestmagazineSerializer(maputhorobj,many=True)
        if authordata:
            return authordata.data
        return None

    def get_user_id(self,obj):
        userobj = User.objects.filter(id=obj.users.id).last()
        if userobj:
            return userobj.id
        return None

    def get_user_name(self,obj):
        userobj = User.objects.filter(id=obj.users.id).last()
        if userobj:
            return userobj.first_name
        return None

    # def get_magazineOffer_id(self,obj):
    #     if obj.magazineOffers:
    #         return obj.magazineOffers.id
    #     return None

    # def get_magazinePurchase_id(self,obj):
    #     if obj.magazinePurchase:
    #         return obj.magazinePurchase.id
    #     return None

# get magazine order History serializer
class ShowMagazineOrderHistorySerializer(serializers.ModelSerializer):
    magazine_id = serializers.SerializerMethodField()
    magazine_name = serializers.SerializerMethodField()
    user_id = serializers.SerializerMethodField()
    user_name = serializers.SerializerMethodField()
    magazine_price = serializers.SerializerMethodField()
    magazine_rent_price = serializers.SerializerMethodField()
    magazine_author = serializers.SerializerMethodField()
    cover_pic = serializers.SerializerMethodField()
    magazine_ratting = serializers.SerializerMethodField()
    purchase_type = serializers.SerializerMethodField()
    # price = serializers.SerializerMethodField()
    class Meta:
        model = MagazineOrderinfo
        # fields = '__all__'
        fields = ['id','transaction_id','purchase_type','user_id','user_name','magazine_id','magazine_name','magazine_ratting','magazine_price','magazine_rent_price','magazine_author','cover_pic','created_on','updated_on']


    # def get_price(self,obj):
    #     try:
    #         priceobj = MagazineInfo.objects.filter(id=obj.magazines.id).last()
    #         print(priceobj,'====data purchase===')
    #         if priceobj:
    #                 return priceobj.buy_price
    #         return None
    #     except MagazineOrderinfo.DoesNotExist as e:
    #         return None
    # def get_price(self,obj):
    #     try:
    #         purchaseobj = MagazinePurchaseInfo.objects.filter(id=obj.magazinePurchase.id).last()
    #         print(purchaseobj,'====data purchase===')
    #         if purchaseobj:
    #             buyobj=purchaseobj.buy_price
    #             print(buyobj,'====buy price')
    #             rentobj=purchaseobj.rent_price
    #             print(rentobj,'===rent price==')
    #             if buyobj:
    #                 return buyobj
    #             elif rentobj:
    #                 return rentobj
    #         return None
    #     except MagazineOrderinfo.DoesNotExist as e:
    #         return None

    def get_purchase_type(self,obj):
        purchaseobj = MagazinePurchaseInfo.objects.filter(id=obj.magazinePurchase.id).last()
        if purchaseobj:
            return purchaseobj.purchases_type
        return None

    def get_magazine_id(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.magazines.id).last()
        if magazineobj:
            return magazineobj.id
        return None

    def get_magazine_name(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.magazines.id).last()
        if magazineobj:
            return magazineobj.name
        return None

    def get_magazine_ratting(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.magazines.id).last()
        if magazineobj:
            return magazineobj.ratting
        return None

    def get_magazine_price(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.magazines.id).last()
        if magazineobj:
            return magazineobj.buy_price
        return None


    def get_magazine_rent_price(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.magazines.id).last()
        if magazineobj:
            return magazineobj.rent_price
        return None

    def get_magazine_rent_price(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.magazines.id).last()
        if magazineobj:
            return magazineobj.rent_price
        return None

    def get_cover_pic(self,obj):
        try:
            if obj:
                magazineobj=MagazineInfo.objects.filter(id=obj.magazines.id).last()
                serializer = MagazineInfosCoverPicSerializer(magazineobj, many=False)
                return serializer.data
            return None
        except MagazineInfo.DoesNotExist:
            return None

    # def get_magazine_url(self,obj):
    #     try:
    #         if obj.id:
    #             magazineobj=MegazinePages.objects.filter(magazine=obj.magazine.id).last()
    #             if magazineobj:
    #                 serializer = MegazinePagesSerializer(magazineobj).data
    #                 return serializer
    #             return None
    #         return None
    #     except MagazineInfo.DoesNotExist:
    #         return None

    def get_magazine_author(self,obj):
        auth = Author.objects.filter(id=obj.magazines.author_id).all()
        if auth:
            return AuthorSerializer(auth,many=True).data
        return None

    def get_user_id(self,obj):
        userobj = User.objects.filter(id=obj.users.id).last()
        if userobj:
            return userobj.id
        return None

    def get_user_name(self,obj):
        userobj = User.objects.filter(id=obj.users.id).last()
        if userobj:
            return userobj.first_name
        return None

    # def get_magazineOffer_id(self,obj):
    #     if obj.magazineOffers:
    #         return obj.magazineOffers.id
    #     return None

    # def get_magazinePurchase_id(self,obj):
    #     if obj.magazinePurchase:
    #         return obj.magazinePurchase.id
    #     return None


# post magazine Review serializer
class MagazineReviewInfoSerializer(serializers.ModelSerializer):
    class Meta:
        model = magazineReviewInfo
        # fields = '__all__'
        fields = ['id','magazines','users','ratting','description','created_on','updated_on']
# update magazine Review serializer
class UpdateMagazineReviewInfoSerializer(serializers.ModelSerializer):
    class Meta:
        model = magazineReviewInfo
        # fields = '__all__'
        fields = ['id','magazines','users','ratting','description']

# show Review serializer
class ReviewInfoSerializer(serializers.ModelSerializer):
    magazine_id = serializers.SerializerMethodField()
    user_id = serializers.SerializerMethodField()
    ratting = serializers.SerializerMethodField()
    description = serializers.SerializerMethodField()
    class Meta:
        model = magazineReviewInfo
        # fields = '__all__'
        fields = ['id','magazine_id','user_id','ratting','description','created_on','updated_on']

    def get_magazine_id(self,obj):
        if obj.magazines:
            return obj.magazines.id
        return None

    def get_user_id(self,obj):
        if obj.users:
            return obj.users.id
        return None

    def get_ratting(self,obj):
        if obj.ratting:
            return obj.ratting
        return None

    def get_description(self,obj):
        if obj.description:
            return obj.description
        return None
    
# show Review list serializer
class ReviewInfoListSerializer(serializers.ModelSerializer):
    magazine_id = serializers.SerializerMethodField()
    user_id = serializers.SerializerMethodField()
    class Meta:
        model = magazineReviewInfo
        # fields = '__all__'
        fields = ['id','magazine_id','user_id','ratting','description','created_on','updated_on']

    def get_magazine_id(self,obj):
        if obj.magazines:
            return obj.magazines.id
        return None

    def get_user_id(self,obj):
        if obj.users:
            return obj.users.id
        return None

class profilepicSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ['profile_pic',]
# get Magazine ReviewInfo History serializer
class MagazineReviewInfoHistorySerializer(serializers.ModelSerializer):
    magazine_id = serializers.SerializerMethodField()
    magazine_name = serializers.SerializerMethodField()
    user_id = serializers.SerializerMethodField()
    user_name = serializers.SerializerMethodField()
    cover_pic = serializers.SerializerMethodField()
    profile_pic = serializers.SerializerMethodField()
    magazine_by_ratting = serializers.SerializerMethodField()
    class Meta:
        model = magazineReviewInfo
        # fields = '__all__'
        fields = ['id','magazine_id','magazine_by_ratting','magazine_name','user_id','user_name','ratting','description','profile_pic','cover_pic','created_on','updated_on']

    def get_cover_pic(self,obj):
        try:
            if obj:
                magazineobj=MagazineInfo.objects.filter(id=obj.magazines.id).last()
                serializer = MagazineInfosCoverPicSerializer(magazineobj, many=False)
                return serializer.data
            return None
        except magazineReviewInfo.DoesNotExist:
            return None

    def get_magazine_id(self,obj):
        if obj.magazines:
            return obj.magazines.id
        return None

    def get_magazine_by_ratting(self,obj):
        if obj.magazines:
            return obj.magazines.ratting
        return None

    def get_user_id(self,obj):
        if obj.users:
            return obj.users.id
        return None

    def get_profile_pic(self,obj):
        try:
            if obj:
                magazineobj=User.objects.filter(id=obj.users.id).last()
                serializer = profilepicSerializer(magazineobj, many=False)
                return serializer.data
            return None
        except magazineReviewInfo.DoesNotExist:
            return None
    # def get_profile_pic(self,obj):
    #     try:
    #         if obj.users:
    #             return obj.users.profile_pic
    #         return None
    #     except magazineReviewInfo.DoesNotExist:
    #         return None
    def get_user_name(self,obj):
        if obj.users:
            return obj.users.first_name
        return None

    def get_magazine_name(self,obj):
        if obj.magazines:
            return obj.magazines.name
        return None



# Magazine Read Status serializer
class MagazineReadStatusSerializer(serializers.ModelSerializer):
    class Meta:
        model = MagazineReadStatus
        # fields = '__all__'
        fields = ['id','magazine','user','is_read_status','read_count','created_on','updated_on']


# show Magazine Read Status serializer
class ShowMGAReadStatusSerializer(serializers.ModelSerializer):
    magazine_id = serializers.SerializerMethodField()
    user_id = serializers.SerializerMethodField()
    class Meta:
        model = MagazineReadStatus
        # fields = '__all__'
        fields = ['id','magazine_id','user_id','is_read_status','created_on','updated_on']

    def get_magazine_id(self,obj):
        if obj.magazine:
            return obj.magazine.id
        return None

    def get_user_id(self,obj):
        if obj.user:
            return obj.user.id
        return None
   